C# Prism事件聚合器持久事件

C# Prism事件聚合器持久事件,c#,wcf,events,prism,msmq,C#,Wcf,Events,Prism,Msmq,我已经在我的服务器上实现了Prism事件聚合器,其中一个服务发布一个事件,另一个服务监听它。 我的订阅代码: my_aggregator.GetEvent<MyEvent>().Subscribe(Handler,true); my_aggregator.GetEvent().Subscribe(Handler,true); 鉴于我将我的活动发布为: my_aggregator.GetEvent<MyEvent>().Publish(Payload); my_ag

我已经在我的服务器上实现了Prism事件聚合器,其中一个服务发布一个事件,另一个服务监听它。 我的订阅代码:

 my_aggregator.GetEvent<MyEvent>().Subscribe(Handler,true);
my_aggregator.GetEvent().Subscribe(Handler,true);
鉴于我将我的活动发布为:

my_aggregator.GetEvent<MyEvent>().Publish(Payload);
my_aggregator.GetEvent().Publish(有效负载);
问题是,如果用户还活着,那么一切都正常。但是,假设一个事件被发布,订阅者(是一个服务)以某种方式关闭。是否有一种方式,当订户再次激活时,它可以响应触发的事件

我已经研究了netmsmq绑定,以及它如何在服务之间提供队列,以便即使服务器关闭也可以避免数据丢失

我必须把它和我目前的机制联系起来吗?? 或者有没有其他方法可以实现这一点?? 有没有标准的处理机制


编辑:如果您可以提供一个链接/代码段,描述实现此目的所需的路径,这将非常有帮助。

PRISM事件聚合器仅保证在发布者引发事件时通知订阅者(同步或异步)。它不能保证订阅者正确处理“事件”。在您的情况下,将调用订阅者的
处理程序
。这就是事件聚合器可以/应该做的所有事情。为了确保
处理程序
工作正常(取决于服务是否处于活动状态),并且不会错过任何
有效负载
,您绝对需要类似于
队列
机制的东西

您正在寻找一种“存储和转发”机制。几年前,我使用中描述的方法完成了相同的事情。然而,我已经有几年没有对Prism做太多的工作了,这篇文章大约是在2008年,所以虽然所描述的方法可能仍然适用,但对于较新版本的Prism,实际实现可能不一样。

我在codeplex论坛上发布了这个问题,并从Bryan Noyes那里得到了答案。它是:

恐怕你完全不符合Prism酒吧sub活动的设计目的。它们是为松散耦合的组件而设计的,这些组件在客户端上同时都在内存中,但您不希望在这些客户端组件之间引入耦合,以便它们进行通信。对于您所讨论的那种场景,某种类型的服务器端队列是正确的答案,无论它们是基于MSMQ、RabbitMQ还是Windows server Service Bus的Service Bus队列(或者根据您是希望队列位于本地还是云中而定的许多其他选项)


总之,在服务器端事件方面,prism pubsubevents不是一个好主意。

@syedosamaruf-我修复了链接!看起来你还是找到了:)是的:)我会让这个帖子打开一两天,如果没有更好的答案,我会接受你的答案,因为它为我指明了一个好的方向