WCF:如何在WsHttpBinding中检测断开连接并获取原始上下文

时间:2011-05-26 20:53:01

标签: wcf wcf-binding

我有一个WsHttpBinding请求 - 回复服务方法,它处理针对中间层服务(连接到数据库)的事务,并使用事务ID向客户端返回响应消息。

我有几个问题:

  1. 如何在收到响应之前检测到客户端意外断开/故障的时间?我注意到WsHttpBinding从未触发channel_faulted事件。

  2. 假设可以实现#1,我如何获取原始事务ID(即在传出响应中),以便回滚/反转客户端未收到的事务?

  3. 非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

首先,一般来说,该服务应该对其客户几乎没有任何了解。系统的设计应该没有像这样的紧耦合。

这对您的方案意味着您可能需要使用可靠的消息传递 - 类似NetTCPBindingWSHttpBinding。如果客户端未收到消息,则服务器将知道。

我建议你看看chapter 7 in Juval Lowy's Programming WCF Services。第7章是关于WCF中的事务。

WCF中的事务支持允许您的客户端将其事务传播到WCF服务。

如果您正在使用WCF交易并且无论出于何种原因回拨到客户端都会失败,则交易将中止(回答您的第二个问题)。通过这种方式,您的服务无需了解您的客户。 WCF会为您解决这个问题。

Lowy建议结合使用可靠的消息传递和transactionFlow。类似的东西:

<netTcpBinding>
  <binding name="TransactionalTCP" transactionFlow="true">
    <reliableSession enabled="true"/>
  </binding>
</netTcpBinding>