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