我有以下场景,我正在尝试测试:
当我从客户端到服务端点进行Web服务调用时,我得到以下异常:
{"与动作'的消息HTTP:// IMyService/CreateContainer ’不能在接收器处进行处理,由于在EndpointDispatcher一个ContractFilter不匹配,这可能是因为无论是合同不匹配(发送者和接收者之间不匹配的操作)或一发送方和接收方之间的绑定/安全性不匹配.检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无)."}
我开始使用MS Service Trace Viewer,但不确定在哪里查看.在查看客户端和端点中的类时,它们看起来完全相同.
如何开始调试此问题?
导致此异常的可能原因是什么?
Pau*_*ner 74
"EndpointDispatcher上的ContractFilter不匹配"表示接收方无法处理该消息,因为它与接收方为接收消息的端点配置的任何合同都不匹配.
这可能是因为:
有在看EndpointDispatcher类关于这一主题的更多信息.
所以:
确保您的客户端和服务器合同匹配.
检查客户端和服务器之间的绑定是否相同.
检查客户端和服务器之间的安全设置是否相同.
小智 73
我有这个错误,它是由接收合同没有实现被调用的方法引起的.基本上,有人没有将最新版本的WCF服务部署到主机服务器.
小智 19
我有这个问题,发现在我的代理生成器中,我从另一个服务复制,我忘了更改服务的名称.
我改变了这个......
Return New Service1DataClient(binding, New EndpointAddress(My.Settings.WCFServiceURL & "/Service1Data.svc"))
Run Code Online (Sandbox Code Playgroud)
至...
Return New Service2DataClient(binding, New EndpointAddress(My.Settings.WCFServiceURL & "/Service2Data.svc"))
Run Code Online (Sandbox Code Playgroud)
这是一个简单的代码错误,但几乎不可能调试.我希望这能节省一些时间.
Bra*_*itz 18
如果您尝试连接到错误的URL,您也会得到这个;)
我在我的系统中定义了两个端点和服务,名称相似.
在某些时候在我的客户端上交换URL时出现了这个确切的错误.真的摸不着头脑,直到最后弄清楚这个愚蠢的错误.
我通过在合同实现中添加以下内容来解决这个问题:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
例如:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
public class MyUploadService : IMyUploadService
{
}
Run Code Online (Sandbox Code Playgroud)
对于调用.net端点的Java客户端.这是由不匹配的Soap Action标头引起的.
Content-Type: application/soap+xml;charset=UTF-8;action="http://example.org/ExampleWS/exampleMethod"
Run Code Online (Sandbox Code Playgroud)
上面的HTTP标头或后面的XML标记需要匹配您尝试调用的操作/方法.
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:gen="http://schemas.datacontract.org/2004/07/GenesysOnline.WCFServices">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:To>https://example.org/v1/Service.svc</wsa:To>
<wsa:Action>http://example.org/ExampleWS/exampleMethod</wsa:Action>
</soap:Header>
<soap:Body>
...
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
我复制了svc文件并重命名后得到了这个.虽然文件名和svc.cs文件已正确重命名,但标记仍引用原始文件.
要解决此问题,请右键单击复制的svc文件,然后选择" 查看标记"并更改服务引用.
正如@chinto 等其他答案中所述,当 SOAP:Action 标头元素与 Endpoint 不匹配时,就会发生这种情况。
您可以通过查看服务器的 WSDL 找到要使用的正确 URI。您将看到一个带有输入子元素的操作元素,该元素具有“操作”属性。这就是您的 SOAP:Action 在客户端请求上需要的内容。
<wsdl:operation name="MethodName">
<wsdl:input wsaw:Action="http://tempuri.org/IInterface/MethodName" message="tns:IInterface_MethodName_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IInterface/MethodNameResponse" message="tns:IInterface_MethodName_OutputMessage"/>
</wsdl:operation>
Run Code Online (Sandbox Code Playgroud)