0

我的问题是我想要一个服务器应用程序(在远程计算机上)将某些事件发布到几台客户端计算机。服务器和客户端使用 .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;

我现在的问题是:我必须在订阅中进行哪些更改才能通过网络进行这项工作?甚至可能吗?

4

4 回答 4

1

MSMQ 呢?它似乎非常适合您想要实现的目标?您可以使用传统的发布/订阅模型或多播消息。

于 2008-09-17T10:51:18.777 回答
1

这一步可能有点过头了,但是您是否考虑过使用 WCF 和 WCF 的回调元素?

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

于 2008-09-17T10:55:14.320 回答
0

如果您的服务器每隔一段时间就会离线​​,我看不出如何避免轮询它以检查它是否还活着。

于 2008-09-17T10:30:14.477 回答
0

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

于 2008-10-14T13:46:00.950 回答