簡體   English   中英

WCF ContractFilter不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM