我正在玩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 same,context mode is PerSession
both service and client-side等
这是追踪。你会在我的配置下面找到。 它出了什么问题?
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>
答案 0 :(得分:3)
在服务器配置enspoint上添加:
bindingConfiguration="netTcpEndpoint"
目前绑定配置未附加到端点,因此使用默认的net tcp设置。在你做出改变之前它是好的,但不再是。