2012-08-10 70 views
0

我正在將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爲什麼工作?

回答

0

服務器配置有結合被從未被使用

bindingName="largeBuffer" 

代替

bindingConfiguration="LargeBuffer" 

的LargeBuffer配置。