我在IIS上托管WCF服务。我可以使用浏览器访问wsdl文件。我还可以为我的客户在Visual Studio中添加服务引用。
但是,如果我尝试调用Server.Test(),则抛出ActionNotSupportedException:
行动'http://tempuri.org/IWCFService/Test'的讯息 由于ContractFilter不匹配,无法在接收方处理 在EndpointDispatcher。这可能是因为合同 不匹配(发送者和接收者之间的不匹配行为)或a 发送方和接收方之间的绑定/安全性不匹配。校验 发件人和收件人具有相同的合同和相同的约束力 (包括安全要求,例如消息,传输,无)。
我定义了两个端点:一个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)绑定。
答案 0 :(得分:0)
抱歉,没有任何事情发生在我身上,但如果我建议您在客户端设置跟踪,它应该告诉您实际问题是什么:
http://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx
只是旁注,现在似乎是在客户端引用合约dll而不是使用wsdl的趋势。
答案 1 :(得分:0)
不应该是wcf服务的web.config中的baseaddress:
<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>
答案 2 :(得分:0)
简单重启服务器就行了!