WCF ContractFilter 不匹配
Posted
技术标签:
【中文标题】WCF ContractFilter 不匹配【英文标题】:WCF ContractFilter mismatch 【发布时间】:2014-08-22 03:55:49 【问题描述】:我在 IIS 上托管 WCF 服务。我可以用我的浏览器访问 wsdl 文件。我还可以在 Visual Studio 中为我的客户添加服务引用。
但是,如果我尝试调用 Server.Test(),则会引发 ActionNotSupportedException:
带有 Action 'http://tempuri.org/IWCFService/Test' 的消息 由于 ContractFilter 不匹配,无法在接收方处理 在 EndpointDispatcher。这可能是因为合同 mismatch(发送方和接收方之间的操作不匹配)或 发送方和接收方之间的绑定/安全不匹配。查看 发送者和接收者具有相同的合同和相同的绑定 (包括安全要求,例如消息、传输、无)。
我定义了两个端点:一个 TCP.NET 用于服务和客户端之间的通信,一个 HTTP 用于元数据交换。
服务器配置 (web.conf)
<services>
<service behaviorConfiguration="MyBehavior"
name="WCFServiceLibrary.Service.WCFService">
<endpoint address=""
binding="netTcpBinding"
bindingConfiguration="MyServiceEndpoint"
name="MyServiceEndpoint"
contract="WCFServiceLibrary.Contract.IWCFService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://192.168.0.5:8080/Service.svc" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
客户端配置 (app.conf)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="MyServiceEndpoint">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://192.168.0.5:808/Service.svc" binding="netTcpBinding"
bindingConfiguration="MyServiceEndpoint" contract="ServiceReference.IWCFService"
name="MyServiceEndpoint" />
</client>
</system.serviceModel>
</configuration>
在 IIS 中,我设置了 net.tcp (808:*) 绑定以及 http (8080) 绑定。
【问题讨论】:
【参考方案1】:抱歉,我没有任何反应,但如果我建议您在客户端上设置跟踪,它应该会告诉您实际问题是什么:
http://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx
顺便说一句,现在的趋势似乎是在客户端引用合同 dll 而不是使用 wsdl。
【讨论】:
我试图为 WCF 的乐趣。你可以用配置更新你的问题,也许我会跳出一些东西,或者开始一个新问题。如果您打算经常使用这项服务,那么绝对值得让它发挥作用。【参考方案2】:wcf 服务的 web.config 中的基地址不应该是:
<host>
<baseAddresses>
<add baseAddress="http://192.168.0.5:8080/Service.svc" />
</baseAddresses>
</host>
是“net.tcp://...”
<host>
<baseAddresses>
<add baseAddress="net.tcp://192.168.0.5:8080/Service.svc" />
</baseAddresses>
</host>
【讨论】:
【参考方案3】:简单的重启服务器就可以了!
【讨论】:
以上是关于WCF ContractFilter 不匹配的主要内容,如果未能解决你的问题,请参考以下文章
EndpointDispatcher 错误处的 WCF ContractFilter 不匹配
启用可靠会话时 WCF ContractFilter 不匹配
EndpointDispatcher 的 ContractFilter 不匹配(错误处理)
EndpointDispatcher 的 ContractFilter 不匹配?
由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action '' 的消息。