Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET架构设计问题_C#_.net_Architecture_Message Passing - Fatal编程技术网

C# .NET架构设计问题

C# .NET架构设计问题,c#,.net,architecture,message-passing,C#,.net,Architecture,Message Passing,我刚开始从事一项特殊的开发工作 我们有一个.NET WCF应用程序MySql/EF DAL/ORM,它由线程作业调度器调用,线程作业调度器从一个客户端提取数据,将其存储在数据库中,并将最新数据传递给另一个客户端,反之亦然 所以把它看作是信息 ClientB通过我们的系统向ClientA发送订单,该系统将订单转换为ClientA的可读格式 然后,ClientA可以通过我们的系统向ClientB发送消息,比如“您的订单已发货”或“您的订单已延迟” 我需要将这些消息传递到ClientB,但我希望它是事

我刚开始从事一项特殊的开发工作

我们有一个.NET WCF应用程序MySql/EF DAL/ORM,它由线程作业调度器调用,线程作业调度器从一个客户端提取数据,将其存储在数据库中,并将最新数据传递给另一个客户端,反之亦然

所以把它看作是信息

ClientB通过我们的系统向ClientA发送订单,该系统将订单转换为ClientA的可读格式

然后,ClientA可以通过我们的系统向ClientB发送消息,比如“您的订单已发货”或“您的订单已延迟”

我需要将这些消息传递到ClientB,但我希望它是事务性的,并且我们能够完全控制失败的消息等

为了简单起见,我目前的想法是在数据库中有一个OrderMessages表,它接收消息,状态为“就绪”,然后可以由工厂处理,并使用针对客户端存储的配置转发给相关客户端

很抱歉这件事到处都是,但希望我已经解释了我想做什么:/


尼尔

考虑为发布者和订阅者利用消息平台。 具体来说,考虑使用轮辐模式。

此外,BizTalk专门研究分布式系统中的工作流

还考虑所涉及的努力:

  • 交易(短期和长期)
  • 错误处理
  • 预期的消息格式
  • 配器

您提出的体系结构是一种经典的队列表模式。这些想法也适用于其他数据库

这种架构没有什么问题。请注意,如果在向客户端发送消息时出错,则无法知道是否收到了该消息。这个问题没有100%的解决方案。这是两位将军的问题


如果让客户机直接从数据库中提取,则可以避免此问题。在这种情况下,客户可以使用自己的交易。

我不明白您想要回答什么问题:-Stransacational意味着一组工作可以一起提交,也可以一起回滚(
ACID
)。您能否更详细地解释一下,
OrderMessages
表如何让您做到这一点?我的想法是,任何“处理”消息的失败都会导致处理回滚,并将消息设置为错误状态,允许用户分析错误原因。。在这种情况下,transaction可能是不正确的词。感谢您的回复,我将查看您的链接。确实有两个独立的问题,我可能可以更好地解释它。消息是否被接收并不重要,但对于我们的系统来说,能够识别失败的消息是很重要的,这就是我所说的交易发生的地方。使失败的消息进入失败状态。但是每封邮件的发送者都不知道谁在接收邮件。发件人指定消息的类型,“某物”决定如何处理该消息,这是我试图弄清楚的“某物”。