私の問題は、特定のイベントを複数のクライアントコンピュータに公開する(リモートコンピュータ上の)サーバーアプリケーションが必要なことです。サーバーとクライアントは.Net-Remotingを使用して通信しますので、リモートの.Net-Eventsを使用して機能を取得しています。しかし、1つの欠点があります。サーバ(イベントパブリッシャ)がオフラインになって再起動されると、リモートオブジェクト参照が無効になるため、クライアントは接続を失います。.Net 2.0:一時的なサブスクリプションを使用してリモートコンピュータ上のイベントパブリッシャを購読するにはどうすればよいですか?
この問題を解決するには、疎結合イベントと一時的なCOMサブスクリプションを検討しています。私は1つの出版社と2人の加入者との小さなデモアプリケーションをまとめました。それは1台のコンピュータで美しく動作します。
私は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;
私の質問は今、ネットワーク上でこの作業を行うためにサブスクリプションを変更する必要がありますか?それも可能ですか?