2012-05-15 2 views
7

私は、データを渡すために互いに通信する必要がある複数のウィンドウサービスを含むC#アプリケーションを開発中です。これらのサービスは同じマシン上にあるかもしれませんが、リモートになる可能性があります。私はこの目的のためにWCFを使用してみましたが、WCFが重すぎて余計な設定が必要なように思えます(.NET 3.5が必要です)。クロスプロセス/マシン通信のためのWCF置換

私の質問は、この機能を提供する廃止予定の.NET Remotingのほかに、WCFの最も優れた代替品は何ですか?

+0

が設定不満TADは、ささいなようです。パフォーマンスに関しては、NetTCPバインディングは3.5で利用できるので、そこにあなたの懸念があるかどうかは分かりません。 –

+0

私は、代替案があるかどうか、もしあれば何ができるかについて、より興味があった。 Googleを検索すると常にWCFに戻ってきます。これは、通常Javaをプログラムする人から来ているので、私はRMI、EJBなどに慣れています。 –

+4

私は多かれ少なかれ同じ結論に達しました。私は、WCFの設定が難しく、文書化されておらず、私はそれを間違って設定したかもしれませんが、私が望んでいたほどパフォーマンスは良くなかったし、設定は無数の設定オプションではっきりしていなかった。私は終わったある日私はopen-sourceへの承認を得ることを望んでいる私自身の軽量な* remotingフレームワークを書いています。これは実現することは決して簡単ではありませんでした。この種の問題に挑戦しているのでなければ、問題があることが証明されるまでWCFに固執します。 – spender

答えて

14

私はPInvokeを使用して、Windows RPCランタイムに約8年間アクセスしてきました。それは輸送が行く限り、速くて非常に信頼できる邪悪なものです。 protobuf-csharp-portのような高速シリアライザと組み合わせると、得られる通信は堅実になり、very fastとなります。

  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 @ my user)をメールで送信できます。

アップデートは私が迅速なスタートアップガイドを書いた:WCF replacement for cross process/machine communication

+0

これは、私が探していた代替のように見える、情報ありがとう! –

+1

@Andrew Landsverk、参照:http://csharptest.net/1177/wcf-replacement-for-cross-processmachine-communication/ –

+0

これを準備する時間をとってくれてありがとう! –

2

ZeroMQを調べるとよいでしょう。非常に軽量で効果的で、良いC#バインディングが付いています。 (私の携帯電話でこれを入力するので、今は自分でGoogleに申し訳ありません)。

+0

私はZeroMQライトウェイトを正確に呼んでいません。 –

+0

ZeroMQは、レスポンスを気にせず、メッセージが床に落ちるのを心配しない限り、とても良いです。すべてのキューと同様に、多くのバックログしか格納できません。保証された配信とリクエスト/レスポンス設定におけるZeroMQのパフォーマンスは特に悪いです。 –

関連する問題