.net - 我应该如何保证 "message"被发送并存储一次且仅一次?

标签 .net wcf messaging edi

我正在为两家公司设计 EDI 系统:公司 A 和公司 B。公司 A 已经作为一家小型制造企业存在,而公司 B 是一家在所有者参与下围绕特定产品组建的新公司A 公司拥有为 B 公司生产该产品的专有权。

我负责这两家公司的所有 IT 和开发事务。我需要设计一个 EDI 系统,用于将订单和其他信息从 B 公司传送到 A 公司,反之亦然(用于确认和状态更新等)。

这种类型的东西对我来说相当新鲜,所以我只是在寻求有关如何将新订单从 B 公司发送到 A 公司并保证它到达那里、被存储并且不会被发送的建议不止一次。

我想我可能会使用网络服务来做到这一点。我应该研究 WCF 服务还是坚持使用 ASP.Net Web 服务?

我假设我会随每个订单发送一个唯一的 ID,以便 A 公司的系统能够识别,如果出现混淆,不会保存两次,但我如何确定 A 公司收到了该信息?

非常欢迎任何其他提示或建议。

最佳答案

参见Microsoft: ASMX Web Services are a “Legacy Technology”了解为什么不坚持使用 ASMX Web 服务。

订单不是已经有一些唯一的标识了吗?

无论如何,A 公司的服务都希望确保订单被安全记录(可能在数据库中),只有这样“发送订单”操作才会完成。


在 A 公司,我将创建一个订单处理服务。到目前为止,它只需要一种方法:AcceptOrder。这将接受处理订单所需的所有信息。此操作首先将订单保存到数据库中,一旦数据安全存储,将返回某种确认代码。

尝试再次发送同一订单将会失败,因为您将在 B 公司的唯一订单标识符上保留一个唯一 key 。

我们将信任我们的数据库,这样一旦我们知道数据已提交,就可以安全地响应“我们已经得到了!”

也可以使用其他技术。例如,使用 MSMQ 的事务队列。它具有同样的好处,一旦它说它拥有数据,您就可以相信它拥有数据。

关于.net - 我应该如何保证 "message"被发送并存储一次且仅一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224382/

相关文章:

c# - SQL Server 2008 R2 的 C# CLR 中的 newtonsoft.json 解析器 - 如何部署?

c# - WCF Discovery : System. UriFormatException 使用带通配符 (*) 的 URI 创建 ServiceHost

android - 如何为使用Firestore和消息传递的Flutter Android项目修复Gradle错误

c# - 如何序列化 MVC 5 Razor View 中的对象

c# - 来自普通 SQL 的 Oracle sys_refcursor

WCF:URI 的注册已存在

rabbitmq - MassTransit Saga - 错误和不一致

android - 谷歌云消息限制

c# - 在不知道索引的情况下在 C# 中解析 json

silverlight - Silverlight 中基于任务的数据服务