このトピックでは、Windows Communication Foundation (WCF) に含まれる 3 つの主要なトランスポート (HTTP、TCP、名前付きパイプ) の中から選択するための条件について説明します。 WCF にはメッセージ キュー (MSMQ とも呼ばれます) トランスポートも含まれていますが、このドキュメントではメッセージ キューについては説明しません。
WCF プログラミング モデルでは、(サービス コントラクトで表される) エンドポイント操作と、2 つのエンドポイントを接続するトランスポート メカニズムを分離します。 これにより、サービスをネットワークに公開する方法を柔軟に決定できます。
WCF では、バインド要素のシーケンスで構成されるバインディングを使用して、エンドポイント間でネットワーク経由でデータを転送する方法を指定します。 トランスポートは、バインディングの一部であるトランスポート バインド要素によって表されます。 バインディングには、オプションのプロトコル バインド要素 (セキュリティなど)、必要なメッセージ エンコーダー バインド要素、必要なトランスポート バインド要素が含まれます。 トランスポートは、メッセージのシリアル化された形式を別のアプリケーションと送受信します。
既存のクライアントまたはサーバーに接続する必要がある場合は、特定のトランスポートの使用を選択できない可能性があります。 ただし、WCF サービスは、それぞれ異なるトランスポートを持つ複数のエンドポイントを介してアクセスできます。 1 つのトランスポートがサービスの対象ユーザーをカバーしていない場合は、複数のエンドポイントでサービスを公開することを検討してください。 クライアント アプリケーションは、最適なエンドポイントを使用できます。
トランスポートを選択したら、それを使用するバインドを選択する必要があります。 システム提供のバインド ( System-Provided バインドを参照) を選択することも、独自のカスタム バインドを作成することもできます ( カスタム バインドを参照)。 独自のバインドを作成することもできます。 詳細については、「 User-Defined バインドの作成」を参照してください。
各トランスポートの利点
このセクションでは、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 台のコンピューター上のプロセス間の一方向または双方向の通信に使用できます。
1 台のコンピューター上の異なる WCF アプリケーション間で通信が必要であり、別のコンピューターからの通信を禁止する場合は、名前付きパイプ トランスポートを使用します。 追加の制限は、管理者特権がない限り、Windows リモート デスクトップから実行されているプロセスが同じ Windows リモート デスクトップ セッションに制限される可能性があるということです。
Warnung
IIS でホストされている複数のサイトで脆弱なワイルドカード URL 予約を指定した名前付きパイプ トランスポートを使用すると、次のエラーが発生する可能性があります。サイト '2' をリッスンしようとしたときに、プロトコル 'net.pipe' のライセンス認証サービス 'NetPipeActivator' でエラーが発生しました。そのため、サイトのプロトコルは一時的に無効になります。 詳細については、例外メッセージを参照してください。 URL: WeakWildcard:net.pipe:/<machine name>/ 状態: ConflictingRegistration 例外: プロセス名: SMSvcHost プロセス ID: 1076\
トランスポートの選択に関する決定ポイント
次の表では、トランスポートの選択に使用される一般的な決定ポイントについて説明します。 アプリケーションに適用される追加の属性とトランスポートを考慮する必要があります。 アプリケーションにとって重要な属性を特定し、各属性に適切に関連付けられているトランスポートを特定し、属性セットに最も適したトランスポートを選択します。
特性 | 説明 | 優先されるトランスポート |
---|---|---|
診断 | 診断を使用すると、トランスポート接続の問題を自動的に検出できます。 すべてのトランスポートは、接続性を説明するエラー情報を返す機能をサポートします。 ただし、WCF には、ネットワークの問題を調査するための診断ツールは含まれていません。 | 無し |
ホスティング | すべての WCF エンドポイントは、アプリケーション内でホストされている必要があります。 IIS 6.0 以前のバージョンでは、HTTP トランスポートを使用するアプリケーションのホストのみがサポートされています。 Windows Vista では、TCP や名前付きパイプを含むすべての WCF トランスポートをホストするためのサポートが追加されます。 詳細については、「 インターネット インフォメーション サービスでのホスティング 」および 「Windows プロセス アクティブ化サービスでのホスティング」を参照してください。 | HTTP |
調査 | 検査は、送信中にメッセージから情報を抽出して処理する機能です。 HTTP プロトコルは、ルーティングと制御の情報をデータから分離し、メッセージを検査および分析するツールを簡単に構築できるようにします。 検査が容易なトランスポートでも、ネットワーク アプライアンスの処理能力が少なくて済む場合があります。 使用されるセキュリティのレベルは、メッセージを検査できるかどうかに影響します。 | HTTP |
遅延 | 待機時間は、メッセージの交換を完了するために必要な最小時間です。 すべてのネットワーク操作は、トランスポートの選択に応じて、待機時間が増減します。 ネイティブ メッセージ交換パターンが HTTP などの要求/応答であるトランスポートで双方向または一方向の通信を使用すると、メッセージの強制的な関連付けにより、待機時間が長くなる可能性があります。 このような場合は、TCP などのネイティブ メッセージ交換パターンが双方向であるトランスポートの使用を検討してください。 | TCP、名前付き パイプ |
リーチ | トランスポートの到達は、トランスポートが他のシステムと接続する際の能力を反映しています。 名前付きパイプトランスポートは、ほとんど到達できません。同じコンピューター上で実行されているサービスにのみ接続できます。 TCP トランスポートと HTTP トランスポートはどちらも優れた到達範囲を持ち、一部の NAT およびファイアウォール構成に侵入できます。 詳細については、「 NAT とファイアウォールの操作」を参照してください。 | HTTP、TCP |
安全 | セキュリティとは、機密性、整合性、または認証を提供することで、転送中にメッセージを保護する機能です。 機密性は、メッセージが検査されるのを防ぎ、整合性によってメッセージが変更されないように保護し、認証によってメッセージの送信者または受信者に関する保証が提供されます。 WCF では、メッセージ レベルとトランスポート レベルの両方で転送セキュリティがサポートされています。 トランスポートがバッファー転送モードをサポートしている場合、メッセージ セキュリティはトランスポートで構成されます。 トランスポート セキュリティのサポートは、選択したトランスポートによって異なります。 HTTP、TCP、および名前付きパイプ トランスポートは、トランスポート セキュリティのサポートにおいて妥当なパリティを持っています。 |
全て |
スループット | スループットは、指定した期間に送信および処理できるデータの量を測定します。 待機時間と同様に、選択したトランスポートがサービス操作のスループットに影響する可能性があります。 トランスポートのスループットを最大化するには、コンテンツの送信のオーバーヘッドを最小限に抑えるだけでなく、メッセージ交換の完了を待機する時間を最小限に抑える必要があります。 TCPトランスポートと名前付きパイプトランスポートの両方がメッセージ本文へのオーバーヘッドをほとんど追加せず、メッセージ応答の待機を減らすネイティブなデュプレックス構造をサポートします。 | TCP、名前付きパイプ |
ツール | ツールは、開発、診断、ホスティング、およびその他のアクティビティのためのプロトコルに対するサードパーティ製アプリケーションのサポートを表します。 HTTP プロトコルを使用するためのツールとソフトウェアの開発は、特に大きな投資を意味します。 | HTTP |