代码之家  ›  专栏  ›  技术社区  ›  lowglider

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

  •  0
  • lowglider  · 技术社区  · 17 年前

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

    我正在研究松耦合事件和瞬态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;
    

    我现在的问题是:我必须在订阅中更改什么才能使其在网络上工作?这有可能吗?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Schlafsack    17 年前

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

        2
  •  1
  •   Lee Gathercole    17 年前

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

    回调有效地将客户端转换为服务器。说实话,我对回拨了解不多,只是做过实验。也许值得花10分钟谷歌一下。

        3
  •  0
  •   Hallgrim    17 年前

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

        4
  •  0
  •   csgero    17 年前

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

    推荐文章