2008-09-17 2 views
0

私の問題は、特定のイベントを複数のクライアントコンピュータに公開する(リモートコンピュータ上の)サーバーアプリケーションが必要なことです。サーバーとクライアントは.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; 

私の質問は今、ネットワーク上でこの作業を行うためにサブスクリプションを変更する必要がありますか?それも可能ですか?

答えて

0

サーバーが毎回オフラインになると、それがポーリングして生きていることを確認する方法がわかりません。

1

MSMQはどうですか?あなたが達成しようとしているものには完璧に見えますか?伝統的なパブリッシュ/サブスクライブモデルを使用するか、メッセージをマルチキャストすることができます。

1

これはあまりにも遠すぎるかもしれませんが、WCFとWCFのコールバック要素の使用を検討しましたか?

コールバックは実質的にクライアントをサーバに変えます。正直言って、私はコールバックについて大したことを知らず、実験しただけです。おそらく10分googleの価値がある。

0

あなたはCOMとリモートコンピュータについて話していますが、DCOMのセキュリティ設定を行う必要があると思われます。

関連する問題