配置 WCF 客户端会出现错误“无法处理消息。这很可能是因为操作

Posted

技术标签:

【中文标题】配置 WCF 客户端会出现错误“无法处理消息。这很可能是因为操作【英文标题】:Configuring WCF client gives the error "The message could not be processed. This is most likely because the action 【发布时间】:2012-04-26 00:36:23 【问题描述】:

无论我设置什么配置,我的 Web 服务都会返回错误消息。我收到以下错误消息。

无法处理该消息。这很可能是因为“http://tempuri.org/ITestingWebService/DoWork”操作不正确或 因为消息包含无效或过期的安全上下文 令牌或因为绑定之间不匹配。安全 如果服务中止通道到期,上下文令牌将无效 到不活动。防止服务中止空闲会话 过早地增加服务端点的接收超时 绑定。

这是我的服务器和客户端 web.config WCF 部分。

服务器:

<system.serviceModel>
   <behaviors>
      <serviceBehaviors>
         <behavior name="ConnectedStoreCCM.TestingWebServiceBehavior">
            <serviceMetadata httpGetEnabled="true"  httpGetUrl="" />
            <serviceDebug includeExceptionDetailInFaults="true"  />
         </behavior>
      </serviceBehaviors>
   </behaviors>
   <bindings>
      <wsHttpBinding>
         <binding name="WSHttpBinding_ITestingWebService" 
             openTimeout="00:01:00" receiveTimeout="00:10:00"
             sendTimeout="00:10:00" bypassProxyOnLocal="false"
             transactionFlow="false" hostNameComparisonMode="StrongWildcard"
             messageEncoding="Text" textEncoding="utf-8"
             useDefaultWebProxy="true" allowCookies="false"
             maxReceivedMessageSize="2097152" maxBufferPoolSize="1024768">
            <readerQuotas 
                maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
            <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
            <security mode="None">
               <transport clientCredentialType="None" />
               <message clientCredentialType="None" negotiateServiceCredential="false" 
                        establishSecurityContext="false" />
            </security>
         </binding>
      </wsHttpBinding>
   </bindings>
   <services>
       <service behaviorConfiguration="ConnectedStoreCCM.TestingWebServiceBehavior"
                name="ConnectedStoreCCM.TestingWebService">
          <endpoint 
              address="" 
              binding="wsHttpBinding" 
              contract="ConnectedStoreCCM.ITestingWebService">
             <identity>
                <dns value="localhost" />
             </identity>
          </endpoint>
          <endpoint 
              address="mex" 
              binding="mexHttpBinding" 
              contract="IMetadataExchange" />
          <host>
             <baseAddresses>
                <add baseAddress="http://www.someuri.net/supertest/TestingWebService.svc?wsdl" />
             </baseAddresses>
          </host>
       </service>
    </services>
</system.serviceModel>

客户:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ITestingWebService" closeTimeout="00:10:00" openTimeout="00:10:00"
             receiveTimeout="00:10:00" sendTimeout="00:10:00"
             bypassProxyOnLocal="false" transactionFlow="false"
             hostNameComparisonMode="StrongWildcard"
             messageEncoding="Text" textEncoding="utf-8"
             useDefaultWebProxy="true" allowCookies="false"
             maxBufferPoolSize="1024768"
             maxReceivedMessageSize="2097152" >
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="None" negotiateServiceCredential="false" establishSecurityContext="false" />
          </security>
        </binding>
      </wsHttpBinding>
   </bindings>
   <client>
      <endpoint name="WSHttpBinding_ITestingWebService" 
           address="http://www.someuri.net/supertest/TestingWebService.svc?wsdl"
           binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITestingWebService"
           contract="ServiceReference1.ITestingWebService" >
         <identity>
            <dns value="localhost" />
         </identity>
      </endpoint>
   </client>
</system.serviceModel>

【问题讨论】:

【参考方案1】:

您很可能在ITestingWebService 接口上存在服务合同不匹配的问题。尝试通过右键单击 Visual Studio 中的服务引用来运行“更新服务引用”,看看是否能解决问题。

【讨论】:

感谢 Sixto 的建议,在我阅读您的建议之前,我想我找到了 WCF 部署问题的原因。 我自己找到了WCF服务引用问题的解决方案。这是配置元素设置的部署问题。我必须将 ServiceMetaData 标记 externalMetadataLocation 设置为机器名称和正确的 URL。 svcutil 返回一个 Web 服务地址,例如 ip-0aiquwe/Myservice.svc,而不是 mydomainname.net/Myservice.svc。当我设置 externalMetadataLocaion="mydomainname.net/Myservice.svc";对我来说一切都很好。

以上是关于配置 WCF 客户端会出现错误“无法处理消息。这很可能是因为操作的主要内容,如果未能解决你的问题,请参考以下文章

尽管对 Web 配置和主机工厂进行了更改,但仍会出现 WCF 错误

WCF错误:413 Request Entity Too Large

WCF:无法为 SSL/TLS 安全通道建立信任关系,出现权限错误

.NET Core 中的 WCF 参考

[转]使用代码去描述WCF配置文件

.NET WCF 异常