2008-09-17 29 views
77

マシン上で実行中のプロセスと通信するために、名前付きパイプまたは.NET Remotingを使用する必要がありますか?.NETのプロセス間通信に最適な選択肢は何ですか?

+1

うわー、私は基本的には、基本的に同じ質問を本質的にはっきりと聞いてきました... http://stackoverflow.com/questions/84860/how-to-communicate-with-a-windows-service-from-an-application-that -interacts-wi –

答えて

58

WCFが最適です。これは、a number of different transport mechanismsincludingNamedPipes)をサポートし、完全に構成駆動することができます。 WCFを見てみることを強くお勧めします。

ここにはWCF vs Remoting performance comparisonを行うブログがあります。

ブログからの引用:

WCFおよび.NET Remotingがパフォーマンスに本当に匹敵します。その差は非常に小さく(クライアントの待ち時間を測定する)、どちらが少し速いかは関係ありません。 WCFは.NET Remotingよりもはるかに優れたサーバースループットを備えています。私が完全に新しいプロジェクトを開始するなら、私はWCFを選ぶだろう。とにかくWCFはRemotingよりもはるかに機能しています。 .NET Framework 2.0の

MSDN Section for WCF

+1

リモーティングに有利な証拠。 Microsoft Remoting/WCFチームの誰かから:「Remotingへの開発投資は非常に少なく、WCFはRemotingの後継です」ここからhttp://stackoverflow.com/questions/1294494/is-net-remoting-really-deprecated – MarkJ

0

.net内部プロセス通信を行うために.net remotingが組み込まれています。それを使用すると、将来のバージョンでサポートを継続し、可能性がある場合があります。名前付きパイプでは、将来のバージョンの.NETでの拡張の約束が得られません。

+2

リモーティングを強化する可能性は低いです。 Remoting/WCFチームの誰かから:「Remotingへの開発投資は非常に少なく、WCFはRemotingの後継です」ここからhttp://stackoverflow.com/questions/1294494/is-net-remoting-really-deprecated – MarkJ

5

プロセス間通信を意味する場合は、これまで.NET Remotingを使用していましたが問題はありません。 2つのプロセスが同じマシン上にある場合、通信は非常に高速です。

名前付きパイプの方がはるかに効率的ですが、少なくとも基本的なアプリケーションプロトコルの設計が必要です。これは実現できない可能性があります。 Remotingを使用すると、リモートメソッドを簡単に呼び出すことができます。

+3

名前付きパイプ上のWCFもこれを許可します。また、両方のプロセスで同じコントラクトアセンブリを使用することもできます。 –

14

単一のマシン上にある場合、Named Pipesはパフォーマンスが向上し、remoting infrastructureとWCFで実装できます。または、System.IO.Pipesを直接使用することもできます。

1

.Netリモート処理は、それ自体のプロトコルではありません。 SOAP、名前付きパイプなど、使用するプロトコールを選択できます。

3

リモーティングは、同じマシン内のプロセス間通信のためのIPCチ​​ャネルを提供します。

3

.NET Framework 3.0以上を使用している場合は、WCFを使用します。 WCFを使用すると、パフォーマンス/相互運用性などのトレードオフに依存するさまざまなバインディングを使用できます。あなたが必要とするもの。

パフォーマンスが重要ではなく、他のWebサービステクノロジとの相互運用が必要な場合は、WS-HTTPバインディングを使用することをお勧めします。あなたのケースでは、WCFをnet-tcpバインディングまたは名前付きパイプバインディングで使用できます。どちらもうまくいくはずです。

個人的には、コントラクトドリブンサービスを行い、オブジェクトではなくメッセージに焦点を当てるので、WCFのアプローチはよりクリーンです(私はここでWCF/.NET Remotingのデフォルトプログラミングモデルに基づいて一般化しています) )。多くの意味情報が失われるか、または明確でないため、ワイヤを渡ってオブジェクトを送信するのは嫌いです。 WCFのようにメッセージを送信するだけでは、通信と、単一ノードが構成するクラス/インフラストラクチャとの間の懸念を分離することが容易になります。

1

WCFは柔軟性も提供します。いくつかのconfig(バインディング)を変更するだけで、同じマシン上のIPCの代わりに、同じサービスを他のマシン上に持つことができます。したがって、コードは柔軟性があります。

+0

.NET用のIPC APIのリスト:http://weblogs.asp.net/ricardoperes/local-machine-interprocess -communication-with-net –

関連する問題