我们开发了一个WCF服务,它充当我们系统的API。
某些方法公开了最终将数据写入和更新到DB的功能。
假设客户端发送了其中一个请求,该服务执行了所需的操作,而客户端由于某种原因断开连接并且没有得到响应。
更新有问题数据的示例 - “将X添加到成员M”。
只是为了让事情更清楚 - 客户端发送请求并收到通知请求成功/失败的响应。
我们的问题是 - 如果客户端发送的请求已执行但未收到响应,该怎么办?我们如何通知客户有关此响应?
答案 0 :(得分:2)
你不一定要做任何事情。该服务已执行客户要求的内容。如果客户端注意到它已断开连接,那么它应该使用单独的呼叫询问服务是否执行了该操作。
如果您绝对需要可靠的消息传递,请查看WCF中的可靠消息传递选项。
答案 1 :(得分:1)
一种方法是使用异步消息传递模式,因此您不是提交请求并等待响应,而是提交请求并继续,并且具有回调合同或面向外部的服务合同服务可以连接回(当您处理典型的客户端 - 服务器方案时,回调契约是最佳选择)。回调的缺点是它们只支持使用双向绑定(WSDualHttpBinding,NetTcpBinding等),这将限制与非WCF技术的互操作性。
另一种选择是使用企业服务总线。这基本上是位于中间的软件,可以协调客户端和服务之间的所有内容。这样,如果您的客户端超时,企业服务总线可以触发“补偿”活动,确保您的客户端和服务最终处于一致状态。
<强>更新强> 企业服务总线是一个非常广泛的主题。 Wikipedia is a good place to start和Amazon offers several books covering various platforms in detail。就实际实施而言,微软提供BizTalk Server,IBM拥有WebSphere ESB,Oracle收购了提供AquaLogic(现为Oracle Service Bus)的BEA Systems,还有多个开源系统,包括Apache ServiceMix,Apache Synapse和Mule。