我有一个WCF服务,该服务在生产中运行良好,除了一个无法与该服务进行通信的客户端的新实例外。
在Windows Server 2008 R2系统上,WCF服务在.Net 4.0上的https上运行。所有客户端均为.Net 4.0或更高版本(这些不受我的控制/配置)。
此客户端无法连接时在服务中启用WCF跟踪将显示此错误:
“无法查找通道以接收传入消息。找不到端点或SOAP操作。”
我已经验证了正常工作的客户端和一个不工作的客户端使用的URL和WSDL完全相同。我可以使用Web浏览器通过https查看服务信息站点和WSDL。
我怀疑SSL / TLS协商可能失败,但想检查其他人是否熟悉这种特殊情况。
这是我的服务网络配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_INamedService">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="NamedService.NamedServiceService">
<endpoint address="/NamedServiceService" binding="basicHttpBinding" bindingNamespace="https://my.domain.com/NamedServiceService" bindingConfiguration="BasicHttpBinding_INamedServiceService" contract="NamedServiceService.INamedServiceService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
答案 0 :(得分:0)
可能是端点绑定配置中有错字:
bindingConfiguration="BasicHttpBinding_INamedServiceService"
您的绑定名为:BasicHttpBinding_INamedService而不是BasicHttpBinding_INamedServiceService
<basicHttpBinding>
<binding name="BasicHttpBinding_INamedService">
<security mode="Transport" />
</binding>
</basicHttpBinding>
不确定您的合同名称是什么,但是它确实也包含ServiceService,因此可能要仔细检查一下。
答案 1 :(得分:0)
如果在同一个项目中,为什么您的服务实现和服务接口名称空间不同?您的配置中可能存在一些拼写错误。我建议您仔细检查。
name =“ NamedService.NamedServiceService” contract =“ NamedServiceService.INamedServiceService”
此外,尝试使用以下配置来设置https协议。
<bindings>
<webHttpBinding>
<binding name="myhttpsbinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:10:00" receiveTimeout="00:10:00">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
<binding name="myhttpbinding">
<security mode="None"></security>
</binding>
</webHttpBinding>
</bindings>
请随时告诉我是否有什么可以帮忙的。