自分のマシンで実行中のプロセスと通信するには、名前付きパイプまたは .NET Remoting を使用する必要がありますか?
8 に答える
WCFが最良の選択です。さまざまなトランスポートメカニズム(名前付きパイプを含む )をサポートし、完全に構成駆動型にすることができます。WCFをご覧になることを強くお勧めします。
これは、 WCFとRemotingのパフォーマンスの比較を行うブログです。
ブログからの引用:
WCFと.NETRemotingのパフォーマンスは実際に同等です。違いは非常に小さいため(クライアントの待ち時間を測定)、どちらが少し速いかは問題ではありません。ただし、WCFのサーバースループットは.NETRemotingよりもはるかに優れています。完全に新しいプロジェクトを開始する場合は、WCFを選択します。とにかく、WCFはリモーティング以上のことを行い、それらすべての機能について私はそれが大好きです。
1 台のマシン上にある場合、名前付きパイプを使用するとパフォーマンスが向上し、リモート インフラストラクチャと WCF を使用して実装できます。または、 System.IO.Pipesを直接使用することもできます。
プロセス間通信という意味であれば、今のところ問題なく .NET Remoting を使用しています。2 つのプロセスが同じマシン上にある場合、通信は非常に高速です。
名前付きパイプは間違いなくより効率的ですが、少なくとも基本的なアプリケーション プロトコルの設計が必要であり、実現できない可能性があります。リモート処理を使用すると、リモート メソッドを簡単に呼び出すことができます。
.NET Framework 2.0 のリモート処理は、同じマシン内のプロセス間通信用のIPC チャネルを提供します。
.NET Framework 3.0 以降を使用している場合は、WCF を使用します。WCF を使用すると、パフォーマンス/相互運用性/その他の間のトレードオフに応じて、さまざまなバインドを使用できます。あなたが必要とすること。
パフォーマンスが重要ではなく、他の Web サービス テクノロジとの相互運用が必要な場合は、WS-HTTP バインディングを使用することをお勧めします。あなたの場合、net-tcp バインディングまたは名前付きパイプ バインディングのいずれかで WCF を使用できます。どちらでも動作するはずです。
私の個人的な意見では、WCF アプローチは、コントラクト駆動型サービスを実行し、オブジェクトではなくメッセージに集中できるため、よりクリーンであるということです (ここでは、WCF/.NET リモート処理の既定のプログラミング モデルに基づいて一般化しています)。多くのセマンティック情報が失われたり、明確でなかったりするため、ネットワーク経由でオブジェクトを送信するのは好きではありません。WCF のようにメッセージを送信するだけであれば、通信と、単一ノードを構成するクラス/インフラストラクチャとの間の懸念を簡単に分離できます。
WCF は柔軟性も提供します。一部の構成 (バインディング) を変更するだけで、同じマシンの IPC ではなく、他のマシンで同じサービスを利用できます。したがって、コードは柔軟なままです。
.Net リモート処理は、それ自体がプロトコルではありません。SOAP、名前付きパイプなど、使用するプロトコルを選択できます。
.net リモーティングは、内部プロセス通信を行うために .net に組み込まれています。それを使用すると、将来のバージョンで引き続きサポートされ、おそらく強化されます。名前付きパイプは、.net の将来のバージョンでの機能強化を約束するものではありません