方法: SecurityBindingElement を使用してカスタム バインドを作成するHow to: Create a Custom Binding Using the SecurityBindingElement

Windows Communication Foundation (WCF) には、構成できるシステム指定のバインディングがいくつか用意されていますが、WCF がサポートするすべてのセキュリティオプションを構成するときに完全な柔軟性は提供されません。Windows Communication Foundation (WCF) includes several system-provided bindings that can be configured but do not provide full flexibility when configuring all the security options that WCF supports. ここでは、個別のバインド要素からカスタム バインディングを直接作成する方法を説明し、このようなバインディングを作成する場合に指定できるセキュリティ設定のいくつかに焦点を当てます。This topic demonstrates how to create a custom binding directly from individual binding elements and highlights some of the security settings that can be specified when creating such a binding. カスタムバインディングの作成の詳細については、「バインディングの拡張」を参照してください。For more information about creating custom bindings, see Extending Bindings.

警告

SecurityBindingElement では、IDuplexSessionChannelTransferMode に設定されている場合に TCP トランスポートによって使用される既定のチャネル形状である Buffered チャネル形状をサポートしていません。SecurityBindingElement does not support the IDuplexSessionChannel channel shape, which is the default channel shape use by the TCP transport when TransferMode is set to Buffered. このシナリオで TransferMode を使用するには、StreamedSecurityBindingElement に設定する必要があります。You must set TransferMode to Streamed in order to use SecurityBindingElement in this scenario.

カスタム バインドの作成Creating a Custom Binding

WCF では、すべてのバインドはバインド要素で構成されます。In WCF all bindings are made up of binding elements. 各バインド要素は BindingElement クラスから派生します。Each binding element derives from the BindingElement class. 標準のシステム指定のバインディングの場合、バインド要素は自動的に作成および構成されます。ただし、プロパティ設定の一部はカスタマイズが可能です。For the standard system-provided bindings, the binding elements are created and configured for you, although you can customize some of the property settings.

これに対し、カスタム バインドを作成する場合は、バインド要素が作成および構成され、そのバインド要素から CustomBinding が作成されます。In contrast, to create a custom binding, binding elements are created and configured and a CustomBinding is created from the binding elements.

これを行うには、BindingElementCollection クラスのインスタンスによって表されるコレクションに個別のバインド要素を追加し、ElementsCustomBinding プロパティをそのオブジェクトと同じにします。To do this, you add the individual binding elements to a collection represented by an instance of the BindingElementCollection class, and then set the Elements property of the CustomBinding equal to that object. バインド要素は、トランザクション フロー、信頼できるセッション、セキュリティ、複合二重、一方向、ストリーム セキュリティ、メッセージ エンコーディング、トランスポートの順に追加する必要があります。You must add the binding elements in the following order: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding, and Transport. どのバインディングでも、これらすべてのバインド要素が必要になるとは限りません。Note that not all the binding elements listed are required in every binding.

SecurityBindingElementSecurityBindingElement

3 つのバインド要素がメッセージ レベルのセキュリティに関連しており、これらはすべて SecurityBindingElement クラスから派生します。Three binding elements relate to message level security, all of which derive from the SecurityBindingElement class. この 3 つのバインディングとは、TransportSecurityBindingElementSymmetricSecurityBindingElement、および AsymmetricSecurityBindingElement です。The three are TransportSecurityBindingElement, SymmetricSecurityBindingElement, and AsymmetricSecurityBindingElement. TransportSecurityBindingElement は混合モード セキュリティを提供するために使用されます。The TransportSecurityBindingElement is used to provide Mixed mode security. 他の 2 つの要素は、メッセージ層でセキュリティを提供する場合に使用します。The other two elements are used when the message layer provides security.

トランスポート レベルのセキュリティが提供される場合は、次の追加のクラスが使用されます。Additional classes are used when transport level security is provided:

必要なバインド要素Required Binding Elements

1 つのバインディングに結合できる可能性のあるバインド要素は多数存在します。There are a large number of possible binding elements that can be combined into a binding. これらの組み合わせすべてが有効なわけではありません。Not all of these combinations are valid. ここでは、セキュリティ バインディングに存在する必要のある要素について説明します。This section describes the required elements that must be present in a security binding.

有効なセキュリティ バインディングは、次のような多くの要因に依存します。Valid security bindings depend on many factors, including the following:

  • セキュリティ モードSecurity mode.

  • トランスポート プロトコルTransport protocol.

  • コントラクトに指定されているメッセージ交換パターン (MEP)The message exchange pattern (MEP) specified in the contract.

前述の要因の各組み合わせに有効なバインド要素のスタックの構成を次の表に示します。The following table shows the valid binding element stack configurations for each combination of the preceding factors. これらは最小限の要件であることに注意してください。Note that these are minimal requirements. メッセージ エンコーディング バインド要素、トランザクション バインド要素などの追加のバインド要素をバインディングに追加することもできます。You can add additional binding elements to the binding, such as message encoding binding elements, transaction binding elements, and other binding elements.

セキュリティ モードSecurity Mode トランスポートTransport コントラクトのメッセージ交換パターンContract Message Exchange Pattern コントラクトのメッセージ交換パターンContract Message Exchange Pattern コントラクトのメッセージ交換パターンContract Message Exchange Pattern
Datagram Request Reply Duplex
トランスポートTransport HttpsHttps
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP
OneWayBindingElementOneWayBindingElement
SSL または Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
MessageMessage HttpHttp SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElement (認証モード = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
CompositeDuplexBindingElementCompositeDuplexBindingElement
OneWayBindingElementOneWayBindingElement OneWayBindingElementOneWayBindingElement
HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement
TcpTcp SecurityBindingElementSecurityBindingElement SecurityBindingElementSecurityBindingElement SymmetricSecurityBindingElement (認証モード = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
混合 (メッセージ資格情報付きトランスポート)Mixed (transport with message credentials) HttpsHttps TransportSecurityBindingElementTransportSecurityBindingElement TransportSecurityBindingElementTransportSecurityBindingElement
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP TransportSecurityBindingElementTransportSecurityBindingElement SymmetricSecurityBindingElement (認証モード = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation) SymmetricSecurityBindingElement (認証モード = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
OneWayBindingElementOneWayBindingElement
SSL または Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement

SecurityBindingElements には構成可能な設定が多数あることに注意してください。Note that there are many configurable settings on the SecurityBindingElements. 詳細については、「認証モードの使用」を参照してください。For more information, see SecurityBindingElement Authentication Modes.

詳細については、「セキュリティで保護された通信とセッション」を参照してください。For more information, see Secure Conversations and Secure Sessions.

手順Procedures

SymmetricSecurityBindingElement を使用するカスタム バインディングを作成するにはTo create a custom binding that uses a SymmetricSecurityBindingElement

  1. BindingElementCollection クラスのインスタンスを outputBec という名前で作成します。Create an instance of the BindingElementCollection class with the name outputBec.

  2. 静的メソッド M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true) を呼び出します。このメソッドは、SymmetricSecurityBindingElement クラスのインスタンスを返します。Call the static method M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), which returns an instance of the SymmetricSecurityBindingElement class.

  3. SymmetricSecurityBindingElement クラスの outputBecAdd メソッドを呼び出して、Collection<T> をコレクション (BindingElement) に追加します。Add the SymmetricSecurityBindingElement to the collection (outputBec) by calling the Add method of the Collection<T> of BindingElement class.

  4. TextMessageEncodingBindingElement クラスのインスタンスを作成し、これをコレクション (outputBec) に追加します。Create an instance of the TextMessageEncodingBindingElement class and add it to the collection (outputBec). これにより、バインディングによって使用されるエンコーディングが指定されます。This specifies the encoding used by the binding.

  5. HttpTransportBindingElement を作成し、これをコレクション (outputBec) に追加します。Create a HttpTransportBindingElement and add it to the collection (outputBec). これにより、バインディングが HTTP トランスポートを使用することが指定されます。This specifies that the binding uses the HTTP transport.

  6. CustomBinding クラスのインスタンスを作成し、コレクション outputBec をコンストラクターに渡して、新規のカスタム バインドを作成します。Create a new custom binding by creating an instance of the CustomBinding class and passing the collection outputBec to the constructor.

  7. 作成されたカスタム バインドは、標準の WSHttpBinding と同じ特性を数多く共有しています。The resulting custom binding shares many of the same characteristics as the standard WSHttpBinding. カスタム バインディングではメッセージ レベルのセキュリティと Windows 資格情報が指定されていますが、セキュリティで保護されたセッションは無効になっているため、サービス資格情報が帯域外で指定される必要があり、また署名も暗号化されません。It specifies message-level security and Windows credentials but disables secure sessions, requires that the service credential be specified out-of-band, and does not encrypt signatures. 署名の暗号化は、MessageProtectionOrder プロパティを手順 4. で示したように設定することでのみ制御できます。The last can be controlled only by setting the MessageProtectionOrder property as shown in step 4. 他の 2 つについては、標準バインディングの設定を使用することで制御できます。The other two can be controlled using settings on the standard binding.

Example

説明Description

次の例では、SymmetricSecurityBindingElement を使用するカスタム バインドを作成する関数全体を示します。The following example provides a complete function to create a custom binding that uses a SymmetricSecurityBindingElement.

コードCode

// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
    SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);
Public Shared Function CreateCustomBinding() As Binding
    ' Create an empty Custom Binding to populate, 
    Dim binding As New CustomBinding()
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As SymmetricSecurityBindingElement
    ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    binding.Elements.Add(ssbe)
    binding.Elements.Add(New TextMessageEncodingBindingElement())
    binding.Elements.Add(New HttpTransportBindingElement())
    Return New CustomBinding(binding)

End Function

関連項目See also