我正在將Windows安全性的SSL安全性添加到以前不安全的IIS託管的WCF服務應用程序中。令我驚訝的是,我發現其中兩個服務端點已經在使用Binding with Transport和Windows安全性。這很令人困惑,因爲使用此服務的客戶端應用程序未配置爲使用傳輸安全性或Windows憑據。下面是該服務的配置:未實施WCF綁定傳輸/ 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" />
察覺到它的安全模式=「none」和交通運輸ClientCredentialType是無而不是Windows。當我在GCService上調用方法時,它會成功。我希望它首先抱怨我試圖通過http而不是https訪問,但它不是。接下來,我希望它不會認證或抱怨客戶端端點在身份驗證方面與服務不匹配,但它不會。
我在同一個應用程序中使用Transport/Windows安全性設置了另一項服務,但沒有使用所有緩衝區/ readquota。對於初學者,當我在VS中爲此服務生成客戶端代理/配置時,它會自動使用https地址,傳輸安全性和Windows身份驗證。如果我手動將它改爲對兩者都使用None,如上所述,對其中一個服務方法的調用不會成功,如預期的那樣。上面的GCService爲什麼工作?