データをやり取りするために相互に通信する必要がある複数の Windows サービスを含む C# アプリケーションに取り組んでいます。これらのサービスは同じマシン上にある場合もありますが、リモートの場合もあります。この目的でWCFを使用することを検討しましたが、WCFは重すぎて、余分な構成がたくさんあるようです。
私の質問は、この機能を提供する非推奨の .NET Remoting 以外に、WCF の最良の代替品は何でしょうか?
私は PInvoke を使用して Windows RPC ランタイムにアクセスしてから 8 年近くになります。トランスポートに関する限り、非常に高速で非常に信頼性があります。protobuf-csharp-port のような高速なシリアライザーと組み合わせると、結果として得られる通信は堅固で非常に高速です。
したがって、これをゼロから構築するには、次の 3 つの部分が必要です。
これらはすべて、次のパッケージの NuGet で利用できます: Google.ProtocolBuffers、CSharpTest.Net.RpcLibrary、およびGoogle.ProtocolBuffers.Rpc。
以下は、開始時の簡単な概要です。
Google Protocol Buffer Languageを使用して一連のメッセージとサービスを定義します。
定義したら、ProtoGen.exe を実行してサービス スタブとメッセージを C# で生成します。「-service_generator_type=IRPCDISPATCH」を追加して、正しいサービス コードを生成してください。
生成されたソース ファイルをプロジェクトに追加し、上記のパッケージから 3 つのアセンブリを参照します。
最後に、protobuf-csharp-rpcプロジェクト ページのサンプル クライアント/サーバー コードを見てください。「SearchService」をサービス名に置き換えると、実行する準備が整います。
必要に応じて、RPC クライアント/サーバーの構成を変更します。この例は、ローカル ホストのみである LRPC の使用を示しています。ただし、DemoRpcLibrary.csソース ファイルには、TCP/IP と名前付きパイプも表示されます。
詳しい情報や例については、いつでも私 (roger @ 私のユーザー名) にメールしてください。
アップデート
クイック スタートアップ ガイドを書きました:クロス プロセス/マシン通信の WCF 置換。
ZeroMQ を調べることをお勧めします。これは非常に軽量で効果的で、優れた C# バインディングが付属しています。(これは私の携帯電話で入力しているので、今のところ自分でグーグルで検索する必要があります。申し訳ありません)。