.Net 2.0:如何使用临时订阅在远程计算机上订阅事件发布者?

时间:2020-03-05 18:58:13  来源:igfitidea点击:

我的问题是我想拥有一个服务器应用程序(在远程计算机上)以将某些事件发布到多台客户端计算机。服务器和客户端使用.Net-Remoting进行通信,因此目前我正在使用远程.Net-Events来获取功能。但是有一个缺点:当服务器(事件发布者)脱机并重新启动时,由于远程对象引用无效,客户端将失去连接。

我正在研究松散耦合事件和瞬态COM订阅来解决此问题。我将一个演示程序与一个发布者和两个订阅者放在一起。它在一台计算机上可以很好地工作。

我正在使用COMAdmin-Libraries为事件订阅者创建一个临时订阅。代码如下:

MyEventHandler handler = new MyEventHandler();
ICOMAdminCatalog catalog;
ICatalogCollection transientCollection;
ICatalogObject subscription;
catalog = (ICOMAdminCatalog)new COMAdminCatalog();
transientCollection = (ICatalogCollection)catalog.GetCollection("TransientSubscriptions");
subscription = (ICatalogObject)transientCollection.Add();
subscription.set_Value("Name", "SubTrans");
subscription.set_Value("SubscriberInterface", handler);
string eventClassString = "{B57E128F-DB28-451b-99D3-0F81DA487EDE}";
subscription.set_Value("EventCLSID", eventClassString);
string sinkString = "{9A616A06-4F8D-4fbc-B47F-482C24A04F35}";
subscription.set_Value("InterfaceID", sinkString);
subscription.set_Value("FilterCriteria", "");
subscription.set_Value("PublisherID", "");
transientCollection.SaveChanges();
handler.Event1 += OnEvent1;
handler.Event2 += OnEvent2;

我现在的问题是:要通过网络进行此项工作,必须更改订阅中的哪些内容?可能吗?

解决方案

回答

如果服务器每隔一段时间就会脱机,我将看不到如何避免对其进行轮询以检查其是否处于活动状态。

回答

MSMQ呢?对于我们要实现的目标来说似乎很完美?我们可以使用传统的发布/订阅模型或者多播消息。

回答

这可能是一步,但我们是否考虑过使用WCF和WCF的回调元素?

回调有效地将客户端变成服务器。老实说,我对回调不了解很多,只是做过试验。也许值得一个10分钟的谷歌。

回答

在谈论COM和远程计算机时,我怀疑我们必须进行一些DCOM安全配置。