WCF ContractFilter不匹配

时间:2014-07-01 14:29:36

标签: c# wcf

我在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)绑定。

3 个答案:

答案 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)

简单重启服务器就行了!