WCF-“无法查找通道以接收传入消息。找不到端点或SOAP操作。”但只有一位客户

时间:2018-12-26 18:06:38

标签: wcf

我有一个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>

2 个答案:

答案 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>

请随时告诉我是否有什么可以帮忙的。