9

データをやり取りするために相互に通信する必要がある複数の Windows サービスを含む C# アプリケーションに取り組んでいます。これらのサービスは同じマシン上にある場合もありますが、リモートの場合もあります。この目的でWCFを使用することを検討しましたが、WCFは重すぎて、余分な構成がたくさんあるようです。

私の質問は、この機能を提供する非推奨の .NET Remoting 以外に、WCF の最良の代替品は何でしょうか?

4

3 に答える 3

16

私は PInvoke を使用して Windows RPC ランタイムにアクセスしてから 8 年近くになります。トランスポートに関する限り、非常に高速で非常に信頼性があります。protobuf-csharp-port のような高速なシリアライザーと組み合わせると、結果として得られる通信は堅固で非常に高速です。

したがって、これをゼロから構築するには、次の 3 つの部分が必要です。

  1. シリアル化のための Google のプロトコル バッファ ( protobuf-csharp-port )。
  2. トランスポート用の私自身のCSharpTest.Net.RpcLibrary
  3. protobuf-csharp-rpcからそれらをまとめるためのちょっとしたグルー コード。

これらはすべて、次のパッケージの NuGet で利用できます: Google.ProtocolBuffersCSharpTest.Net.RpcLibrary、およびGoogle.ProtocolBuffers.Rpc

以下は、開始時の簡単な概要です。

  1. Google Protocol Buffer Languageを使用して一連のメッセージとサービスを定義します。

  2. 定義したら、ProtoGen.exe を実行してサービス スタブとメッセージを C# で生成します。「-service_generator_type=IRPCDISPATCH」を追加して、正しいサービス コードを生成してください。

  3. 生成されたソース ファイルをプロジェクトに追加し、上記のパッケージから 3 つのアセンブリを参照します。

  4. 最後に、protobuf-csharp-rpcプロジェクト ページのサンプル クライアント/サーバー コードを見てください。「SearchService」をサービス名に置き換えると、実行する準備が整います。

  5. 必要に応じて、RPC クライアント/サーバーの構成を変更します。この例は、ローカル ホストのみである LRPC の使用を示しています。ただし、DemoRpcLibrary.csソース ファイルには、TCP/IP と名前付きパイプも表示されます。

詳しい情報や例については、いつでも私 (roger @ 私のユーザー名) にメールしてください。

アップデート

クイック スタートアップ ガイドを書きました:クロス プロセス/マシン通信の WCF 置換

于 2012-05-15T21:02:34.857 に答える
2

ZeroMQ を調べることをお勧めします。これは非常に軽量で効果的で、優れた C# バインディングが付属しています。(これは私の携帯電話で入力しているので、今のところ自分でグーグルで検索する必要があります。申し訳ありません)。

于 2012-05-15T20:53:06.570 に答える
0

NFX グルーを見てください。

結合システムでは、WCF よりもはるかに高速です。

Glue ブログによるプロセス間通信

基準

コード: https://github.com/aumcode/nfx

于 2015-05-05T17:16:32.643 に答える