53

これまで、Windows で IPC を実行する必要はありませんでした。プログラムのペア、標準の GUI/CLI アプリ、および Windows サービスを開発しています。アプリはサービスに何をすべきかを伝える必要があります。では、通信がローカルのみであると仮定すると、これら 2 つのプロセスに最適な通信方法は何でしょうか?
最善とは、より堅牢でエラーが発生しにくいという意味であり、最高のパフォーマンスやコーディングの容易さではありません。

注: 標準の TCP ソケット、名前付きパイプ、またはその他の通信手段のみを使用する方法について質問しています。

4

6 に答える 6

73

.Net での IPC は、次を使用して実現できます。

WCF

名前付きパイプを使用するには、.Net 3.0 以降が必要です。

コード例


リモーティング

.Net 1.0 でリリースされたオリジナルの IPC フレームワーク。リモーティングはもはや積極的に開発されていないと思います。代わりに WCF を使用することをお勧めします。

コード例

Remoting によるプロセス間通信- TCP チャネルを使用

資力


csharptest-net RpcLibrary を使用した Win32 RPC

最近、Win32 RPC ライブラリをラップし、ローカルおよびリモート RPC に使用できる .net クラス ライブラリを作成したプロジェクトに出会いました。

プロジェクトのホームページ: http://csharptest.net/projects/rpclibrary/

MSDN リファレンス:

ライブラリの上で実行される Google プロトコル バッファ rpc クライアントもあります: https://code.google.com/p/protobuf-csharp-rpc/


WM_COPYDATA

完全を期すために、 WM_COPYDATAメッセージで WIN32 メソッドを使用することもできます。以前、.Net 1.1 でこの方法を使用して、Windows エクスプローラーから複数のファイルを開く単一インスタンス アプリケーションを作成しました。

資力

ソケット

カスタム プロトコルの使用 (難しい)

于 2008-09-08T17:08:16.387 に答える
7

ローカルのみの場合、名前付きパイプを使用して成功しました。TCP のオーバーヘッドを回避し、(少なくとも .NET の場合) 効率的でありながら、まともな API を使用できます。

于 2008-09-08T17:04:16.677 に答える
2

.Net 2.0 に制限されているため、WCF はおそらくオプションではありません。同じマシン上のアプリ ドメイン間の基本的な通信メカニズムとして、共有メモリを使用した .Net リモート処理を使用できます。このアプローチを使用すると、プロセスを異なるマシンに簡単に配置し、共有メモリ プロトコルをネットワーク プロトコルに置き換えることができます。

于 2008-09-08T17:16:59.660 に答える
2

Windows サービスと通信する標準的な方法は、サービス制御コードを使用することです。Windows サービスは 0 ~ 255 のコードを受け取ることができます。0 ~ 127 はシステム用に予約されています。カスタム コマンドには 128 ~ 255 を使用できます。

複雑なオブジェクトをサービスに送信する必要がある場合は、データベース、xml、ファイル、tcp、http などを使用します。リロード構成、プロセス項目などの制御コマンドを送信する場合以外には、この制御コードを使用する必要があります。

サービスのクエリなど、利用可能な追加機能があります。Windows サービスのドキュメントと API を参照してください。

http://arcanecode.com/2007/05/30/windows-services-in-c-sending-commands-to-your-windows-service-part-7/

于 2010-09-08T21:24:17.627 に答える
0

最善の策は、WCF を使用することです。Windows サービスでサービス ホストを作成し、GUI アプリケーションが使用できる適切に定義されたインターフェイスを公開できます。WCF では、必要に応じて名前付きパイプを介して通信できます。または、TCP、HTTP などの他の通信プロトコルを選択することもできます。WCF を使用すると、優れたツール サポートと多くの利用可能な情報が得られます。

于 2008-09-08T17:18:28.453 に答える
0

この議論に追加したいと思います。これが行き過ぎである場合は、私を叱責してください - しかし、セマフォ (または複数のセマフォ) を基本的な通信に使用することはできませんか?

于 2011-02-11T10:09:12.530 に答える