![](/img/trans.png)
[英]WCF- ContractFilter mismatch at the EndpointDispatcher
[英]WCF ContractFilter mismatch
我在IIS上托管WCF服務。 我可以使用瀏覽器訪問wsdl文件。 我還可以在Visual Studio中為客戶端添加服務引用。
但是,如果我嘗試調用Server.Test(),則會引發ActionNotSupportedException:
由於EndpointDispatcher的ContractFilter不匹配,帶有Action'http: //tempuri.org/IWCFService/Test '的消息無法在接收方處理。 這可能是由於合同不匹配(發送方和接收方之間的操作不匹配)或發送方和接收方之間的綁定/安全不匹配造成的。 檢查發送方和接收方是否具有相同的合同和相同的綁定(包括安全要求,例如,消息,傳輸,無)。
我定義了兩個端點:一個用於服務與客戶端之間通信的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)綁定。
抱歉,沒有什么讓我驚訝的,但是如果我建議您在客戶端上設置跟蹤,它應該告訴您實際的問題是什么:
http://msdn.microsoft.com/zh-CN/library/ms733025(v=vs.110).aspx
只是附帶說明,當今看來,在客戶端中引用合同dll而不是使用wsdl是一種趨勢。
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>
簡單重啟服務器就可以了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.