1

我有一个 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 期待证书?

4

1 回答 1

1

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

于 2013-06-20T15:41:01.207 回答