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

标签 wcf wcf-binding

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

我有几个问题:

  1. 如何在客户端收到响应之前检测到意外断开连接/故障?我注意到 channel_faulted 事件永远不会为 WsHttpBinding 触发。

  2. 假设#1 可以实现,我如何才能获得原始交易 ID(在传出响应中),以便回滚/撤销客户端未收到的交易?

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

最佳答案

首先,一般来说,该服务应该对其客户知之甚少或一无所知。系统的设计方式不应像这样紧密耦合。

这对您的场景意味着您可能需要使用可靠的消息传递 - 类似于 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>

关于WCF:如何在 WsHttpBinding 中检测断开连接并获取原始上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144924/

相关文章:

wcf - 从单个客户端到服务的多个并发WCF调用

c - 是否可以从非托管 C(ZigBee 设备)调用 WCF 4.0(SOAP 或 REST)?

c# - 通过 WCF 发送元组对象?

c# - 通过 datacontract 使用 WCF Restful 服务

.net - 为什么我的 WCF 代理发送内容类型为 : application/xml? 的 JSON

wcf - 使用 TcpClientCredentialType.Windows 时的加密强度是多少?

wcf - 遵循 WCF 绑定(bind)配置命名约定

c# - WCF 找不到端点配置问题

c# - 限制每个用户的并发 wcf session 数

.net - 在控制台应用程序中托管 WCF 服务时出现 IMetadataExchange MEX 端点错误