2013-06-20 55 views
0

我有一個WCF服務端點,它使用WsHttpBinding和BasicHttpBinding以及不同的地址來允許它們共享端點。 BasicHttpBinding沒有安全性。當我的服務和客戶端在同一臺機器上時,BasicHttpBinding正常工作。當它們位於不同的機器上時,BasicHttpBinding失敗,並且在服務的跟蹤日誌中出現此錯誤:未提供服務證書。在ServiceCredentials中指定一個服務證書。當與WsHttpBinding共享端點時,BasicHttpBinding失敗 - 未提供服務器證書

如果我從服務的配置中刪除WsHttpBinding,錯誤將停止。

服務的web.config:

<bindings> 
    <basicHttpBinding> 
     <binding name="MyBasicBinding" 
        maxBufferPoolSize="5242880" 
        maxReceivedMessageSize="5242880" /> 
    </basicHttpBinding> 
    <wsHttpBinding> 
     <binding name="MyWsBinding" 
        bypassProxyOnLocal="false" 
        hostNameComparisonMode="StrongWildcard" 
        maxBufferPoolSize="5242880" 
        maxReceivedMessageSize="5242880" 
        allowCookies="false"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
      <security mode="Message"> 
       <message clientCredentialType="None" /> 
      </security> 
     </binding> 
    </wsHttpBinding> 
</bindings> 

<services> 
    <service name="MyService"> 
     <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="MyBasicBinding" 
      contract="MyFramework.IMyService" bindingNamespace="http://MyFramework/Services/"/> 

     <!-- The basic binding fails when the WS binding is present. 
      If I remove the WS binding, the basic binding will work. --> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyWsBinding" 
      contract="MyFramework.IMyService" bindingNamespace="http://MyFramework/Services/"/> 
    </service> 
</services> 

僅供參考我使用的是不同的地址綁定基本允許2個綁定到共享相同的終點。 WsHttpBinding的URL是http://server/MyService.svc,BasicHttpBinding的網址是http://server/MyService.svc/basic

爲什麼WsHttpBinding的存在強制BasicHttpBinding期望證書?

回答

1

當服務上升時,需要確保所有端點都有效。由於其中一個端點(WSHttp之一)使用證書認證,因此如果未定義此證書,服務器將不會啓動。所以這個錯誤與BasicHttp無關。這仍然不能解釋爲什麼如果在同一臺機器上一切正常,檢查是否使用完全相同的配置。

+0

謝謝亞龍!我的解決方案是爲基本和WS創建2個SVC文件。 – Keith

相關問題