2

分散システムを構築しています。いくつかのアプリケーションがあります (一部は .Net ベース (C#) で、他は C++ ベース (C++/CLI ではありません!)) です。これらのアプリは、クラスター内の各コンピューターにインストールされます (現在は Windows 駆動)。IPC に使用するローカル PC: C# アプリの MemoryMappedFiles、C++ アプリの共有メモリ、C# と C++ 間の IPC の名前付きパイプ。インターネット経由で、C# アプリを C++ アプリのブリッジとして使用して、WCF TCP バインディングを使用します。

LAN通信は何を使えば良いですか?MPICH2は、TCPを使用しているようです...典型的な名前付きパイプは、最適化(セキュリティを無効にするなど)を使用したWCF TCPバインディングよりも高速ですか?メッセージは非常に大きく、ほとんどが double 型です。私の状況では WCF は非常に便利です (すべての数学的方法は単なる契約です) が、そのパフォーマンスは問題です。

4

2 に答える 2

0

http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspxをお読みください

選択は、サービスが配置されている場所に依存することがわかります。それが役に立てば幸い。

于 2012-10-24T14:16:33.077 に答える
0

2 つの異なるレイヤーを混合しています。NamedPipes で WCF を実行することもできます。名前付きパイプ (多くのセットアップ ワードで機能しますが) は、2 台のコンピューター上の 2 つのプロセス間で通信するようには設計されていません。

トランスポートの選択に関するこの MSDN ページを参照して、いつどのトランスポートを使用するかを理解してください。

各交通機関の利点

このセクションでは、3 つの主要なトランスポートのいずれかを選択する主な理由について説明し、それらの中から選択するための詳細な意思決定表を示します。

HTTP トランスポートを使用する場合

HTTP は、クライアントとサーバー間の要求/応答プロトコルです。最も一般的なアプリケーションは、Web サーバーと通信する Web ブラウザー クライアントで構成されます。クライアントは、クライアントの要求メッセージをリッスンするサーバーに要求を送信します。サーバーがリクエストを受信すると、リクエストのステータスを含むレスポンスを返します。成功した場合は、Web ページ、エラー メッセージ、その他の情報などのオプション データが返されます。HTTP プロトコルの詳細については、HTTP - ハイパーテキスト転送プロトコルを参照してください。

HTTP プロトコルは接続ベースではありません。応答が送信されると、状態は維持されません。複数ページのトランザクションを処理するには、アプリケーションは必要な状態を維持する必要があります。

WCF では、HTTP トランスポート バインディングは、従来の非 WCF システムとの相互運用性のために最適化されています。すべての通信パーティが WCF を使用している場合、TCP ベースまたは名前付きパイプ ベースのバインディングの方が高速です。詳細については、NetTcpBinding および NetNamedPipeBinding を参照してください。

TCP トランスポートを使用する場合

TCP は、エンド ツー エンドのエラー検出と修正を備えた接続ベースのストリーム指向配信サービスです。接続ベースとは、データを交換する前にホスト間の通信セッションが確立されることを意味します。ホストは、論理 IP アドレスによって識別される TCP/IP ネットワーク上の任意のデバイスです。

TCP は、信頼性の高いデータ配信と使いやすさを提供します。具体的には、TCP は送信者にパケット配信を通知し、パケットが送信されたのと同じ順序で配信されることを保証し、失われたパケットを再送信し、データ パケットが重複しないことを保証します。この信頼性の高い配信は、2 つの TCP/IP ノード間で適用され、エンドポイント間に適用される WS-ReliableMessaging とは同じではないことに注意してください。エンドポイントに含まれる中間ノードの数に関係ありません。

WCF TCP トランスポートは、通信の両端で WCF を使用しているシナリオ向けに最適化されています。このバインディングは、異なるマシン間の通信を伴うシナリオでは最速の WCF バインディングです。メッセージ交換は、最適化されたメッセージ転送のために BinaryMessageEncodingBindingElement を使用します。TCP は二重通信を提供するため、クライアントがネットワーク アドレス変換 (NAT) の背後にある場合でも、二重コントラクトの実装に使用できます。

名前付きパイプ トランスポートを使用する場合

名前付きパイプは、プロセスが通信に使用できる共有メモリのセクションなど、Windows オペレーティング システム カーネル内のオブジェクトです。名前付きパイプには名前があり、単一のマシン上のプロセス間の一方向または双方向の通信に使用できます。

1 台のコンピューター上の異なる WCF アプリケーション間で通信が必要な場合に、別のコンピューターからの通信を禁止するには、名前付きパイプ トランスポートを使用します。追加の制限として、Windows リモート デスクトップから実行されているプロセスは、昇格された特権を持っていない限り、同じ Windows リモート デスクトップ セッションに制限される場合があります。

于 2012-10-24T14:24:23.680 に答える