我有一个WsHttpBinding
请求 - 回复服务方法,它处理针对中间层服务(连接到数据库)的事务,并使用事务ID向客户端返回响应消息。
我有几个问题:
如何在收到响应之前检测到客户端意外断开/故障的时间?我注意到WsHttpBinding
从未触发channel_faulted事件。
假设可以实现#1,我如何获取原始事务ID(即在传出响应中),以便回滚/反转客户端未收到的事务?
非常感谢任何帮助。感谢。
答案 0 :(得分:0)
首先,一般来说,该服务应该对其客户几乎没有任何了解。系统的设计应该没有像这样的紧耦合。
这对您的方案意味着您可能需要使用可靠的消息传递 - 类似NetTCPBinding
或WSHttpBinding
。如果客户端未收到消息,则服务器将知道。
我建议你看看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>