0

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

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

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

4

3 回答 3

1

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

埃德

于 2011-04-14T08:04:39.970 回答
1

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

例如,如果一个人删除了一些记录,但客户端断开连接,下次他连接时,他会看到这些记录已删除。即使他再次尝试删除它们(数据保留在 UI 中),这也不会造成任何伤害。

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

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

于 2011-04-14T08:17:40.987 回答
0

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

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

因此,可靠性只能在绝对最高层——应用层——而不是通信堆栈的任何较低层来完全解决。这使其成为一流的业务关注点,而不是纯粹的技术关注点。

该问题可以通过对删除敏感数据的过程稍作更改来解决。

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

我最近写了一篇博文,理由是可靠性是头等业务问题,不能转移到较低层。

于 2013-11-24T03:36:13.737 回答