启用可靠会话会导致异常,该异常会讨论合同过滤器不匹配

时间:2013-09-03 07:32:41

标签: wcf nettcpbinding ws-reliablemessaging

上下文

我正在玩WCF配置,试图启用可靠的会话。

当禁用可靠会话时,一切都按预期工作,客户端可以成功连接到服务器。只要将enabled="true"放在<reliableSession>中的服务的Web.config和客户端的App.config中,当客户端尝试打开连接时,就会抛出以下异常:

  

由于ContractFilter的{​​{1}}不匹配,无法在接收方处理带有操作“http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence”的消息。这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。检查发件人和收件人是否具有相同的合同和相同的约束(包括安全要求,例如邮件,传输,无)。

Stack Overflow上有关于此异常的许多问题,但似乎没有一个答案适用。例如,我检查了receiveTimeout and inactivityTimeout are the samecontext mode is PerSession both service and client-side

这是追踪。你会在我的配置下面找到。 它出了什么问题?

微量

enter image description here

  • 红色的例外是我上面引用的例外。
  • 之前收到的消息是EndpointDispatcher
  • 在异常之后发送的消息是CreateSequence消息,用于将异常传播到客户端。

服务端配置

addressing/fault

客户端配置

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  <bindings>
    <netTcpBinding>
      <binding name="netTcpEndpoint" sendTimeout="00:10:00" receiveTimeout="00:10:00">
        <reliableSession ordered="true" enabled="true" inactivityTimeout="00:10:00" />
        <security mode="Message">
          <message clientCredentialType="None" />
        </security>
      </binding>
    </netTcpBinding>
  </bindings>
  <services>
    <service behaviorConfiguration="DebugOrientedBehavior" name="Demo.PipeService">
      <endpoint address="Default.svc" binding="netHttpBinding"
        name="TransportLayerServiceEndpoint" contract="Demo2.IPipeService" />
      <host>
        <baseAddresses>
          <add baseAddress="http://[removed the public URI of the service]/Default.svc" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="DebugOrientedBehavior">
        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

1 个答案:

答案 0 :(得分:3)

在服务器配置enspoint上添加:

bindingConfiguration="netTcpEndpoint"

目前绑定配置未附加到端点,因此使用默认的net tcp设置。在你做出改变之前它是好的,但不再是。