在WCF中构建可靠的服务

时间:2011-04-14 08:00:30

标签: wcf web-services soap ws-reliablemessaging

我目前正在设计一个应该用于返回敏感数据的服务(wsHttp)。一旦客户端要求提供此数据,我就会从数据库中获取数据,编译列表,然后从数据库中删除数据并返回列表。

我担心的是在返回客户端的过程中发生了某些事情(网络问题,......)我已经从数据库中删除了数据,但客户端永远不会得到它。

我在这里有哪些开箱即用的解决方案?

3 个答案:

答案 0 :(得分:1)

没有开箱即用的解决方案。您需要实现某种形式的用户/自动确认,表明已收到数据,并且只有在返回后才会删除。

答案 1 :(得分:1)

这是分布式计算中的固有问题。 没有简单的解决方案。问题是从这些错误中恢复是多么重要。

例如,如果删除某些记录但客户端断开连接,则下次连接时,他会将这些记录视为已删除。即使他试图再次删除它们(数据留在用户界面中),这也不会有害。

对于转账的银行,他们有一个错误解决机制,在第二个流程中,它们匹配他们之间发生的交易。冲突将手动处理。

某些系统(例如 NServiceBus )依赖于MSMQ来存储消息和最终一致性,其中发往客户端的消息最终会在他再次连接时到达。

答案 2 :(得分:0)

有一个简单的解决方案。但它不是一个盒子。

WS-ReliableMessaging(或同样的TCP / IP)等协议在您的消息传递下为您提供了一层可靠性,但是一旦该消息将消息卸载到上面的层,所有的赌注都会关闭。

因此,只能在绝对最高层 - 应用层,而不是通信堆栈中的任何下层,完全解决可靠性问题。这使它成为一流的商业问题,而不是纯粹的技术问题。

只需稍微更改删除敏感数据的过程即可解决问题。

不要立即删除它,而是将其标记为删除。然后,构建驱动您的服务的业务流程,断言客户端必须确认收到敏感数据。然后,当您收到确认后,您可以安全地删除标记为删除的数据,知道它已被接收。

我最近写了一个blog post推论,可靠性是一流的商业问题,无法卸载到较低层。