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

时间:2008-09-17 07:47:30

标签: c# .net com comadmin

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

我正在研究Loosely Coupled Events和Transient COM Subscriptions来解决这个问题。我将一个小型演示应用程序与一个发布者和两个订阅者放在一起它在一台计算机上运行良好。

我正在使用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;

我现在的问题是:我需要更改订阅才能通过网络进行此项工作?它甚至可能吗?

4 个答案:

答案 0 :(得分:1)

MSMQ怎么样?它似乎完美适合你想要实现的目标?您可以使用传统的发布/订阅模型或多播消息。

答案 1 :(得分:1)

这可能是一个太过分的步骤,但您是否考虑过使用WCF和WCF的回调元素?

回调有效地将客户端转变为服务器。说实话,我对回调知之甚少,只进行过实验。也许价值10分钟谷歌。

答案 2 :(得分:0)

如果您的服务器每隔一段时间都处于脱机状态,我就看不出如何避免轮询它以检查它是否还活着。

答案 3 :(得分:0)

当你在谈论COM和远程计算机时,我怀疑你将不得不做一些DCOM安全配置。