Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net 2.0:如何使用临时订阅在远程计算机上订阅事件发布服务器?_C#_.net_Com_Comadmin - Fatal编程技术网

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

C# .Net 2.0:如何使用临时订阅在远程计算机上订阅事件发布服务器?,c#,.net,com,comadmin,C#,.net,Com,Comadmin,我的问题是,我希望有一个服务器应用程序(在远程计算机上)将某些事件发布到多个客户端计算机。服务器和客户端使用.Net远程处理进行通信,因此目前我使用远程.Net事件来获取该功能。但有一个缺点:当服务器(事件发布服务器)脱机并重新启动时,客户端会失去连接,因为远程对象引用变得无效 我正在研究松散耦合事件和瞬态COM订阅来解决这个问题。我制作了一个小的演示应用程序,其中有一个发布者和两个订阅者。它在一台计算机上运行得很好 我正在使用COMAdmin库为事件订阅服务器创建临时订阅。代码如下所示: My

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

我正在研究松散耦合事件和瞬态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安全配置