2008-09-04 5 views
0

.NETアセンブリをプラグインとして使用する無関係な2つのプロセスがあります。ただし、いずれのプロセスもいつでも開始/停止できます。私はサーバーである特定のプロセスに頼ることはできません。実際には、複数のコピーがプロセスの1つで実行されている可能性がありますが、他のプロセスは1つのみです。サービスメディエータを持たない.NET IPC

最初はthis articleに基づいて解決策を実装しました。ただし、これは、クライアントを実行する前にサーバーを実装しているサーバーを実行する必要があります。

クライアントが最初に実行されているときに、何らかの通知をサーバーに実装するにはどうすればよいですか?

答えて

1

共有メモリを使用すると、共有メモリバッファ(または事前に十分に割り当てるだけ)。また、そこに置くデータ構造を手動で管理する必要があります。テストして作業したら、そのシンプルさのために使用とテストがより簡単になります。

リモートルートを使用する場合は、名前付きパイプを使用して単一のシステム通信にTCPチャネルまたはHTTPチャネルの代わりにIpcChannelを使用できます。 http://msdn.microsoft.com/en-us/library/4b3scst2.aspx。このソリューションの問題点は、プロセスがエンドポイントを登録できるレジストリタイプのソリューション(共有メモリまたはその他の永続ストアのいずれか)を考え出す必要があることです。そうすれば、それらを探しているときに、システム上で実行されているすべてのエンドポイントを照会する方法を見つけることができ、探しているものを見つけることができます。 Remotingを使用する利点は、シリアライゼーションとメソッド呼び出しが非常に簡単なことです。また、ネットワーク上の複数のマシンに移動する場合は、代わりにネットワークチャネルを使用するようにスイッチを切り替えることもできます。問題は、「リモート」コールと「ローカル」コー​​ルとが明確に分離されていない限り、リモート処理が苛立ってしまうことです。

私はWCFについてよく分かりませんが、それも検討する価値があります。スパイダーセンスによれば、おそらくこの問題に対するより洗練された解決策があると言えます。

また、他のすべてのプロセスとは別の「サーバー」プロセスを作成して起動することもできます(複数のシステムが起動していないことを確認するためにシステムミューテックスを使用します)。他のすべてのプロセスの登録ハブ

もう1つイベント(パブリッシュ/サブ)のパブリッシュ・サブスクライブ・モデルを調べます。このテクニックは、イベントソースが利用可能になる前に起動されるリスナを持っているが、イベントの登録を待つことを望まない場合に役立ちます。 「サーバー」プロセスは、イベントレジストリを処理してパブリッシャーとサブスクライバーをリンクします。

0

なぜサーバーとクライアントを両方ともホストしていないと、最初にサーバーになるのは誰ですか?また、サーバーがドロップアウトした場合でも、アクティブなクライアントは役割を切り替えます。

0

IPC(.netかどうか)やTCP/HTTPトンネルを扱う方法はたくさんありますが、状況や環境によっては非常に悪い選択です。

共有メモリと名前付きパイプは、より良い解決策である2つの方法です(そして、それらは.Netで実行できます)。 .Net FrameworkにはIPCクラスもありますが、私は個人的にAppDomainの問題のためにそれらを好きではありません...

0

私はGaroに同意します。

パブ/サブサービスを使用するとすばらしい解決策になります。これは明らかに、このサービスが他の2つのいずれかの前に起動して実行する必要があることを意味します。

pub/subをスキップする場合は、エンドポイントの異なる両方のアプリケーションでサービスを実装することができます。いずれかのアプリケーションが起動されると、IPCプロキシ経由で他の既知のオブジェクトにアクセスしようとします。プロキシが失敗した場合、他のオブジェクトは起動していません。

-Scott

0

私は、信頼性の高いシンプル、かつ全二重IPCを行うための高速な方法を探している間、IPCのために利用可能なすべてのオプションを蛇行2日間を過ごしました。 Codeplex.comで見つけたIPCLibraryは、これまでに試したすべてのオプションから完全に機能しています。全部で7行のコードしかありません。 :D誰かがこれを見つけて全二重IPCを見つけようとすると、時間をかけずにこのライブラリを試してみてください。ソースコードを取得し、data.dllをコンパイルし、与えられた例に従ってください。

HTH、 circ

関連する問題