【问题标题】:WCF Service - what happens when client doesn't get the response?WCF 服务 - 当客户端没有收到响应时会发生什么?
【发布时间】:2011-11-01 12:18:51
【问题描述】:

我们开发了一个 WCF 服务,它充当我们系统的 API。

一些方法公开了最终将数据写入和更新到数据库的功能。

假设客户端发送了其中一个请求,服务执行了所需的操作,而客户端由于某种原因断开连接并且没有得到响应。

更新有问题数据的示例 - “将 X 添加到成员 M”。

只是为了让事情更清楚 - 客户端发送请求并接收通知请求成功/失败的响应。

我们的问题是 - 如果客户端发送的请求已执行但未收到响应 - 我们如何通知客户端有关响应?

【问题讨论】:

  • 如果客户端没有收到服务的响应,就会产生异常。这还不够有用吗?
  • 我说的是服务端...如果客户端收到错误信息但服务已经执行了操作怎么办?

标签: wcf web-services


【解决方案1】:

您不必做任何事情。该服务已经完成了客​​户的要求。如果客户端注意到它已断开连接,那么它应该使用单独的调用询问服务是否执行了操作。

如果您绝对需要可靠的消息传递,请查看 WCF 中的可靠消息传递选项。

【讨论】:

    【解决方案2】:

    一种方法是使用异步消息传递模式,因此您无需提交请求并等待响应,而是提交请求并继续,并拥有您的回调合同或面向外部的服务合同服务可以连接回(当您处理典型的客户端-服务器场景时,回调合约是最佳选择)。回调的缺点是它们仅支持使用双向绑定(WSDualHttpBinding、NetTcpBinding 等),这将限制与非 WCF 技术的互操作性。

    另一种选择是使用企业服务总线。这基本上是位于中间的软件,可以协调您的客户和服务之间的一切。这样,如果您的客户端超时,企业服务总线可以触发“补偿”活动,确保您的客户端和服务最终处于一致状态。

    更新: 企业服务总线是一个非常广泛的话题。 Wikipedia is a good place to start,和Amazonoffersseveralbookscoveringvariousplatformsin detail。就实际实现而言,Microsoft 提供 BizTalk Server,IBM 拥有 WebSphere ESB,Oracle 购买了提供 AquaLogic(现为 Oracle Service Bus)的 BEA Systems,还有多个开源系统,包括 Apache ServiceMix、Apache Synapse 和 Mule。

    【讨论】:

    • 感谢 joel,关于第一个选项,由于您描述的缺点,我们放弃了它。关于第二个选项 - 你能告诉我一些关于这个的有用信息吗?我以前没听说过...
    • @Mithir 我已经更新了我的答案(我无法在评论中包含所有链接)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2020-09-30
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多