方法 : SecurityBindingElement を使用してカスタム バインディングを作成する

Windows Communication Foundation (WCF) にはシステム指定のバインディングがいくつか含まれています。これらのバインディングは構成できますが、WCF がサポートするすべてのセキュリティ オプションを構成しようとする場合には十分な柔軟性が得られません。ここでは、個別のバインディング要素からカスタム バインディングを直接作成する方法を説明し、このようなバインディングを作成する場合に指定できるセキュリティ設定のいくつかに焦点を当てます。カスタム バインディングの作成詳細については、 、「バインディングの拡張」を参照してください。

カスタム バインディングの作成

WCF では、すべてのバインディングがバインディング要素から構成されています。各バインディング要素は BindingElement クラスから派生します。標準のシステム指定のバインディングの場合、バインディング要素は自動的に作成および構成されます。ただし、プロパティ設定の一部はカスタマイズが可能です。

これに対し、カスタム バインディングを作成する場合は、バインディング要素が作成および構成され、そのバインディング要素から CustomBinding が作成されます。

これを行うには、BindingElementCollection クラスのインスタンスによって表されるコレクションに個別のバインディング要素を追加し、CustomBindingElements プロパティをそのオブジェクトと同じにします。バインディング要素は、トランザクション フロー、信頼できるセッション、セキュリティ、複合二重、一方向、ストリーム セキュリティ、メッセージ エンコーディング、トランスポートの順に追加する必要があります。どのバインディングでも、これらすべてのバインディング要素が必要になるとは限りません。

SecurityBindingElement

3 つのバインディング要素がメッセージ レベルのセキュリティに関連しており、これらはすべて SecurityBindingElement クラスから派生します。この 3 つのバインディングとは、TransportSecurityBindingElementSymmetricSecurityBindingElement、および AsymmetricSecurityBindingElement です。TransportSecurityBindingElement は混合モード セキュリティを提供するために使用されます。他の 2 つの要素は、メッセージ層でセキュリティを提供する場合に使用します。

トランスポート レベルのセキュリティが提供される場合は、次の追加のクラスが使用されます。

必要なバインディング要素

1 つのバインディングに結合できる可能性のあるバインディング要素は多数存在します。これらの組み合わせすべてが有効なわけではありません。ここでは、セキュリティ バインディングに存在する必要のある要素について説明します。

有効なセキュリティ バインディングは、次のような多くの要因に依存します。

  • セキュリティ モード
  • トランスポート プロトコル
  • コントラクトに指定されているメッセージ交換パターン (MEP)

前述の要因の各組み合わせに有効なバインディング要素のスタックの構成を次の表に示します。これらは最小限の要件であることに注意してください。メッセージ エンコーディング バインディング要素、トランザクション バインディング要素などの追加のバインディング要素をバインディングに追加することもできます。

セキュリティ モード トランスポート コントラクトのメッセージ交換パターン

データグラム

要求/応答

二重

トランスポート

Https

OneWayBindingElement

HttpsTransportBindingElement

HttpsTransportBindingElement

TCP

OneWayBindingElement

SSL または Windows StreamSecurityBindingElement

SSL または Windows StreamSecurityBindingElement

SSL または Windows StreamSecurityBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

メッセージ

Http

SymmetricSecurityBindingElement

SymmetricSecurityBindingElement

SymmetricSecurityBindingElement (認証モード = SecureConversation)

CompositeDuplexBindingElement

OneWayBindingElement

OneWayBindingElement

HttpTransportBindingElement

HttpTransportBindingElement

HttpTransportBindingElement

Tcp

SecurityBindingElement

SecurityBindingElement

SymmetricSecurityBindingElement (認証モード = SecureConversation)

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

混合 (メッセージ資格情報付きトランスポート)

Https

TransportSecurityBindingElement

TransportSecurityBindingElement

OneWayBindingElement

HttpsTransportBindingElement

HttpsTransportBindingElement

TCP

TransportSecurityBindingElement

SymmetricSecurityBindingElement (認証モード = SecureConversation)

SymmetricSecurityBindingElement (認証モード = SecureConversation)

OneWayBindingElement

SSL または Windows StreamSecurityBindingElement

SSL または Windows StreamSecurityBindingElement

SSL または Windows StreamSecurityBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

SecurityBindingElements には構成可能な設定が多数あることに注意してください。詳細な情報については、次のページを参照してください。 「SecurityBindingElement 認証モード」を参照してください。

詳細な情報については、次のページを参照してください。 「セキュリティ保護されたメッセージ交換とセッション」を参照してください。

手順

SymmetricSecurityBindingElement を使用するカスタム バインディングを作成するには

  1. BindingElementCollection クラスのインスタンスを outputBec という名前で作成します。

  2. 静的メソッド M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true) を呼び出します。このメソッドは、SymmetricSecurityBindingElement クラスのインスタンスを返します。

  3. BindingElement クラスの CollectionAdd メソッドを呼び出して、SymmetricSecurityBindingElement をコレクション (outputBec) に追加します。

  4. TextMessageEncodingBindingElement クラスのインスタンスを作成し、これをコレクション (outputBec) に追加します。これにより、バインディングによって使用されるエンコーディングが指定されます。

  5. HttpTransportBindingElement を作成し、これをコレクション (outputBec) に追加します。これにより、バインディングが HTTP トランスポートを使用することが指定されます。

  6. CustomBinding クラスのインスタンスを作成し、コレクション outputBec をコンストラクタに渡して、新規のカスタム バインディングを作成します。

  7. 作成されたカスタム バインディングは、標準の WSHttpBinding と同じ特性を数多く共有しています。カスタム バインディングではメッセージ レベルのセキュリティと Windows 資格情報が指定されていますが、セキュリティで保護されたセッションは無効になっているため、サービス資格情報が帯域外で指定される必要があり、また署名も暗号化されません。署名の暗号化は、MessageProtectionOrder プロパティを手順 4. で示したように設定することでのみ制御できます。他の 2 つについては、標準バインディングの設定を使用することで制御できます。

説明

次の例では、SymmetricSecurityBindingElement を使用するカスタム バインディングを作成する関数全体を示します。

コード

関連項目

リファレンス

SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding

概念

システム標準のバインディング

その他の技術情報

バインディングの拡張