我的问题是我想要一个服务器应用程序(在远程计算机上)将某些事件发布到几台客户端计算机。服务器和客户端使用 .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;
我现在的问题是:我必须在订阅中进行哪些更改才能通过网络进行这项工作?甚至可能吗?