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

问题描述:

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

我正在调查松散耦合事件和瞬态COM订阅来解决此问题。我将一个小型演示应用程序与一个发布者和两个订阅者放在一起。它在一台电脑上运行非常漂亮。

我正在使用COMAdmin库为事件订阅者创建临时订阅。代码如下所示:

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安全配置。