WCF Binding Transport/Windows Binding Security не се прилага

В процес съм на добавяне на SSL защита с Windows удостоверяване към предишно незащитено IIS хоствано WCF сервизно приложение. За моя изненада открих, че две от крайните точки на услугата вече използват обвързване с транспорт и защита на Windows. Това е объркващо, тъй като клиентските приложения, които използват тази услуга, не са конфигурирани да използват защита на транспорта или идентификационни данни на Windows. Ето конфигурацията на услугата:

<binding name="LargeBuffer" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
    maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    <security mode="Transport">
    <transport clientCredentialType="Windows" />
    </security>
</binding>

...

<service behaviorConfiguration="WebServices.GCServiceBehavior"
    name="WebServices.GCService">
    <endpoint address="" binding="basicHttpBinding" name="GCSecuredEndpoint"
        bindingName="largeBuffer" contract="WebServices.IGCService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

Когато използвам Visual Studio за генериране на клиентски прокси и конфигурация, той създава това:

<binding name="GCSecuredEndpoint" closeTimeout="00:01:00"
    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
    useDefaultWebProxy="true">
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
</binding>

...

<endpoint address="http://devservices.mysite.com/GCService/GCService.svc"
    binding="basicHttpBinding" bindingConfiguration="GCSecuredEndpoint"
    contract="GCSvc.IGCService" name="GCSecuredEndpoint" />

Забележете, че това е режим на защита = "Няма" и Transport ClientCredentialType е Няма вместо Windows. Когато извикам метод на GCService, той успява. Бих очаквал първо да се оплаче, че се опитвам да осъществя достъп през http вместо https, но не го прави. След това бих очаквал да не удостовери или да се оплаче, че крайната точка на клиента не съответства на услугата по отношение на удостоверяване, но не е така.

Имам друга услуга в същото приложение, която току-що бях настроил с транспорт/защита на Windows, само без всички неща за буфер/квота за четене. Като за начало, когато генерирам клиентския прокси/конфигурационен файл във VS за тази услуга, той автоматично използва https адреса, транспортната сигурност и Windows удостоверяването. Ако ръчно го променя, за да използва None и за двете, както по-горе, извикването на един от методите на услугата не е успешно, както се очаква. Защо GCService по-горе работи?


person xr280xr    schedule 10.08.2012    source източник


Отговори (1)


Конфигурацията на сървъра има

bindingName="largeBuffer"

вместо

bindingConfiguration="LargeBuffer"

Конфигурацията за свързване на LargeBuffer никога не е била използвана.

person xr280xr    schedule 11.08.2012