EndpointDispatcher 错误处的 WCF ContractFilter 不匹配
Posted
技术标签:
【中文标题】EndpointDispatcher 错误处的 WCF ContractFilter 不匹配【英文标题】:WCF ContractFilter mismatch at the EndpointDispatcher error 【发布时间】:2019-07-20 06:08:08 【问题描述】:需要帮助的人!我们有现有的带有 WCF 和 Microsoft 企业库的旧系统 ASP.NET,我是 WCF 的新手。他们有一个像这样的系统生成的服务模型
界面系统生成:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "IMyService")]
public interface IMyService
类:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public partial class MyService : IMyService
然后他们让我像这样在接口和类下添加一个方法
接口新增方法:
[System.ServiceModel.OperationContractAttribute (Action = "http://tempuri.org/IMyService/DoWork", ReplyAction = "http://tempuri.org/IMyService /DoWorkReponse")]
void DoWork (int param1,int param2);
public void DoWork (int param1,int param2)
base.Channel.DoWork (int param1,int param2);
在类中添加方法:
Public void DoWork(int param1,int param2)
然后当我尝试像这样调用方法时:
IMyService.DoWork(1,2)
显示如下:
System.ServiceModel.ActionNotSupportedException: '由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action 'http://tempuri.org/IMyService/DoWork' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。'
我错过了什么吗?
【问题讨论】:
不知道是不是你的问题,但是当我粘贴你的ReplyAction时,我发现最后一个/和IMyService之间有一个空格,在tempuri.org/IMyService/DoWorkReponse 【参考方案1】:今天我遇到了同样的错误,下面的解决方法为我解决了问题。
在客户端应用程序中,删除现有 WCF 服务引用并再次添加它为我解决了这个问题。
但是,首先,您可能还需要验证托管应用程序服务合约地址和客户端端点地址合约是否相同。
即主机配置。
客户端配置
【讨论】:
【参考方案2】:我通过复制现有服务创建了新服务,但忘记在此 .svc 文件中重命名“服务”属性。
我收到以下错误: System.ServiceModel.ActionNotSupportedException:由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action 'http://tempuri.org/...' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。
一旦我正确设置了“服务”属性,问题就解决了。
【讨论】:
以上是关于EndpointDispatcher 错误处的 WCF ContractFilter 不匹配的主要内容,如果未能解决你的问题,请参考以下文章
EndpointDispatcher 处的 AddressFilter 不匹配 - 带有 To 的 msg
EndpointDispatcher 的 ContractFilter 不匹配(错误处理)
EndpointDispatcher 的 ContractFilter 不匹配?
缺少 EndpointDispatcher 和 ClientRuntime
由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action '' 的消息。