配置 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