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