与WsHttpBinding共享端点时BasicHttpBinding失败 - 未提供服务器证书

时间:2013-06-20 15:35:10

标签: wcf wcf-binding wcf-security

我有一个WCF服务端点,它使用带有不同地址的WsHttpBinding和BasicHttpBinding来允许它们共享端点。 BasicHttpBinding没有安全性。当我的服务和客户端在同一台机器上时,BasicHttpBinding工作正常。当它们在不同的机器上时,BasicHttpBinding失败,我在服务的跟踪日志中收到此错误:未提供服务证书。在ServiceCredentials中指定服务证书。

如果从服务的配置中删除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的URL为http://server/MyService.svc/basic

为什么存在WsHttpBinding会强制BasicHttpBinding获得证书?

1 个答案:

答案 0 :(得分:1)

当服务上升时,需要确保所有端点都有效。由于其中一个端点(WSHttp one)使用证书身份验证,因此如果未定义此证书,服务器将不会启动。所以错误与BasicHttp无关。这仍然无法解释为什么在同一台机器上一切正常,检查是否使用完全相同的配置。