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