バインディングは、クライアントまたはサービス エンドポイントが構築されるたびにサービス ランタイムによって評価される、 バインド要素と呼ばれる特殊な構成要素のコレクションです。 バインディング内のバインディング要素の種類と順序によって、エンドポイントのチャネル スタック内のプロトコル チャネルとトランスポート チャネルの選択とスタック順序が決まります。
バインディング 、特にシステムが提供するバインディングには、通常、カプセル化されたバインド要素の最も一般的に変更されたプロパティを反映する構成プロパティも多数存在します。
バインディングには、トランスポート バインド要素を 1 つだけ含む必要があります。 各トランスポート バインド要素は、既定のメッセージ エンコード バインド要素を意味します。これは、バインディングに最大 1 つのメッセージ エンコード バインド要素を追加することでオーバーライドできます。 トランスポートとエンコーダーのバインド要素に加えて、バインディングには、サービスを提供し、あるエンドポイントから別のエンドポイントに SOAP メッセージを送信するために必要な機能を実装する任意の数のプロトコル バインド要素を含めることができます。 詳細については、「 バインディングを使用したサービスとクライアントの構成」を参照してください。
バインドとバインド要素の拡張
Windows Communication Foundation (WCF) には、さまざまなシナリオに対応するシステム提供のバインディングが含まれています。 (詳細については、「 System-Provided バインディング」を参照してください。ただし、WCF に含まれていないバインディングを作成して使用しなければならない場合があります。 次のシナリオでは、新しいバインディングを作成する必要があります。
新しいバインド要素 (新しいトランスポート、エンコード、プロトコル バインド要素など) を使用するには、そのバインド要素を含む新しいバインドを作成する必要があります。 たとえば、UDP トランスポート用のカスタム
UdpTransportBindingElement
を追加した場合は、それを利用するために新しいバインディングを作成する必要があります。 System.ServiceModel.Channels.CustomBinding型を使用してこの動作を実行する方法については、「カスタム バインド」を参照してください。システムが提供するバインディングがパブリック プロパティで公開されないように既存のバインド要素を構成する。 たとえば、署名と暗号化の操作を実行する順序を変更するには、新しいバインドを作成する必要があります。 この動作の実行については、「 方法 : System-Provided バインドをカスタマイズする」を参照してください。
特定の構成オプションのみを公開する企業の標準バインディングを確立する。 たとえば、セキュリティを無効にできない会社の WSHttpBinding のバリエーションを会社用に作成するには、 WSHttpBindingのように動作するが、セキュリティが常にオンになっている新しいバインディングを作成します。 詳細については、「 User-Defined バインドの作成」を参照してください。
メタデータの一部のカスタマイズを実行するには、通常はカスタム バインド要素を構成または使用する必要はありません。 バインドとバインド要素に対するメタデータ サポートの提供の詳細については、「 構成とメタデータのサポート」を参照してください。
チャネル、バインディング、およびバインド要素
バインドとバインド要素は、属性と動作を含むアプリケーション プログラミング モデルと、ファクトリとリスナー、メッセージ エンコーダー、トランスポートとプロトコルの実装を含むチャネル モデル間の接続です。 通常、バインド要素とバインドは、アプリケーション レイヤーでチャネルを使用できるように実装されます。
チャネル 層は、サービス 層との間でメッセージを送受信し、エンドポイント間でそれらのメッセージを転送します。 クライアントでは、チャネル レイヤーは、ネットワーク エンドポイントへのチャネルを作成するチャネル ファクトリのスタックです。 サービスでは、チャネル レイヤーは、ネットワーク エンドポイントで受信したチャネルを受け入れるチャネル リスナーのスタックです。
一般的なチャネルには、プロトコル チャネルとトランスポート チャネルの 2 種類があります。 トランスポート チャネルは、あるネットワーク エンドポイントから別のネットワーク エンドポイントへのメッセージの実際の送信を担当します。 トランスポート チャネルには既定のメッセージ エンコーダーが必要であり、メッセージ エンコーダー バインド要素を介して提供される代替メッセージ エンコーダーを使用できる必要があります。 メッセージ エンコーダーは、 System.ServiceModel.Channels.Message をワイヤ表現に変換し、その逆を行います。 プロトコル・チャネルは、SOAP レベルのプロトコル (WS-Security や WS-ReliableMessagingなど) をインプリメントする役割を担います。
トランスポート チャネルとプロトコル チャネルの主な要件は、必要なチャネル インターフェイスを実装することです。 作業チャネル レイヤーを作成するには、ファクトリとリスナーが関連付けられている必要があります。 WCF のチャネル実装を使用するには、各チャネルの BindingElement から派生した関連付けられたバインド要素が必要です。また、 BindingElementExtensionElementから派生した構成ファイルに含めるための関連するバインディング拡張要素が必要です。
前述のように、メッセージ エンコーダー、プロトコル、およびトランスポート チャネル実装のバインド要素をスタックしてチャネル スタックを形成し、順序付けされたセットに並べ替えるメカニズムがバインディングです。 バインド要素とバインド要素は、アプリケーション プログラミング モデルをチャネル モデルに接続します。 チャネル実装はコードから直接使用できますが、エンコーダー、トランスポート、プロトコルがバインド要素として実装されていない限り、サービス レイヤー プログラミング モデルからは使用できません。
チャネルとそのバインド要素の開発の詳細については、「 チャネル レイヤーの拡張」を参照してください。