Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElementHow to: Create a Custom Binding Using the SecurityBindingElement

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) enthält diverse, vom System bereitgestellte und konfigurierbare Bindungen, die jedoch in Bezug auf die Konfiguration aller Optionen, die WCFWCF unterstützt, nicht die volle Flexibilität aufweisen. includes several system-provided bindings that can be configured but do not provide full flexibility when configuring all the security options that WCFWCF supports. Dieses Thema veranschaulicht, wie eine benutzerdefinierte Bindung direkt aus individuellen Bindungselementen erstellt wird, und stellt einige der Sicherheitseinstellungen heraus, die bei der Erstellung einer derartigen Bindung festgelegt werden können.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. Weitere Informationen finden Sie unterFor more information aboutErstellung benutzerdefinierter Bindungen finden Sie unter Erweitern von Bindungen. creating custom bindings, see Extending Bindings.

Warnung

SecurityBindingElement unterstützt die IDuplexSessionChannel-Kanalform nicht, die der standardmäßig vom TCP-Transport verwendeten Kanalform entspricht, wenn TransferMode auf Buffered festgelegt ist.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. Sie müssen TransferMode auf Streamed festlegen, um SecurityBindingElement in diesem Szenario verwenden.You must set TransferMode to Streamed in order to use SecurityBindingElement in this scenario.

Erstellen einer benutzerdefinierten BindungCreating a Custom Binding

In WCFWCF Alle Bindungen bestehen aus Bindungselementen.In WCFWCF all bindings are made up of binding elements. Jedes Bindungselement wird von der BindingElement-Klasse abgeleitet.Each binding element derives from the BindingElement class. Bei den standardmäßigen, vom System bereitgestellten Bindungen werden die Bindungselemente für Sie erstellt und konfiguriert, einige der Eigenschaftseinstellungen können jedoch angepasst werden.For the standard system-provided bindings, the binding elements are created and configured for you, although you can customize some of the property settings.

Im Gegensatz dazu werden zum Erstellen einer benutzerdefinierten Bindung Bindungselemente erstellt und konfiguriert, und aus den Bindungselementen wird eine CustomBinding erstellt.In contrast, to create a custom binding, binding elements are created and configured and a CustomBinding is created from the binding elements.

Fügen Sie hierzu die einzelnen Bindungselemente einer Auflistung hinzu, die durch eine Instanz der BindingElementCollection-Klasse repräsentiert wird, und legen Sie anschließend die Elements-Eigenschaft der CustomBinding auf dieses Objekt fest.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. Die Bindungselemente müssen in der folgenden Reihenfolge hinzugefügt werden: Transaktionsfluss, zuverlässige Sitzung, Sicherheit, Composite Duplex, Unidirektional, Streamsicherheit, Nachrichtencodierung und Transport.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. Beachten Sie, dass nicht alle aufgelisteten Bindungselemente in jeder Bindung erforderlich sind.Note that not all the binding elements listed are required in every binding.

SecurityBindingElementSecurityBindingElement

Drei Bindungselemente beziehen sich auf die Sicherheit auf Nachrichtenebene, wobei alle von der SecurityBindingElement-Klasse abgeleitet werden.Three binding elements relate to message level security, all of which derive from the SecurityBindingElement class. Die drei sind TransportSecurityBindingElement, SymmetricSecurityBindingElement und AsymmetricSecurityBindingElement.The three are TransportSecurityBindingElement, SymmetricSecurityBindingElement, and AsymmetricSecurityBindingElement. Das TransportSecurityBindingElement wird für Sicherheit im gemischten Modus verwendet.The TransportSecurityBindingElement is used to provide Mixed mode security. Die anderen beiden Elemente werden verwendet, wenn die Nachrichtenebene Sicherheit bereitstellt.The other two elements are used when the message layer provides security.

Zusätzliche Klassen werden verwendet, wenn Sicherheit auf Transportebene bereitgestellt wird:Additional classes are used when transport level security is provided:

Erforderliche BindungselementeRequired Binding Elements

Es gibt eine große Anzahl von möglichen Bindungselementen, die zu einer Bindung kombiniert werden können.There are a large number of possible binding elements that can be combined into a binding. Nicht alle Kombinationen sind zulässig.Not all of these combinations are valid. In diesem Abschnitt werden die für eine Sicherheitsbindung erforderlichen Elemente beschrieben.This section describes the required elements that must be present in a security binding.

Gültige Sicherheitsbindungen hängen von vielen Faktoren ab, unter anderem von folgenden:Valid security bindings depend on many factors, including the following:

  • SicherheitsmodusSecurity mode.

  • TransportprotokollTransport protocol.

  • Das im Vertrag angegebene Nachrichtenaustauschmuster (MEP)The message exchange pattern (MEP) specified in the contract.

Die folgende Tabelle enthält die gültigen Konfigurationen von Bindungselementstapeln für jede Kombination der oben genannten Faktoren.The following table shows the valid binding element stack configurations for each combination of the preceding factors. Beachten Sie, dass es sich herbei um Mindestanforderungen handelt.Note that these are minimal requirements. Sie können der Bindung weitere Bindungselemente hinzufügen (beispielsweise Elemente zur Nachrichtencodierung, Transaktionsbindungselemente usw.).You can add additional binding elements to the binding, such as message encoding binding elements, transaction binding elements, and other binding elements.

SicherheitsmodusSecurity Mode TransportTransport Nachrichtenaustauschmuster des VertragsContract Message Exchange Pattern Nachrichtenaustauschmuster des VertragsContract Message Exchange Pattern Nachrichtenaustauschmuster des VertragsContract Message Exchange Pattern
Datagram Request Reply Duplex
TransportTransport HttpsHttps
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP
OneWayBindingElementOneWayBindingElement
SSL oder Windows-StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
MeldungMessage HttpHttp SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
CompositeDuplexBindingElementCompositeDuplexBindingElement
OneWayBindingElementOneWayBindingElement OneWayBindingElementOneWayBindingElement
HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement
TCPTcp SecurityBindingElementSecurityBindingElement SecurityBindingElementSecurityBindingElement SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
Gemischt (Transport mit Nachrichtenanmeldeinformationen)Mixed (transport with message credentials) HttpsHttps TransportSecurityBindingElementTransportSecurityBindingElement TransportSecurityBindingElementTransportSecurityBindingElement
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP TransportSecurityBindingElementTransportSecurityBindingElement SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation) SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
OneWayBindingElementOneWayBindingElement
SSL oder Windows-StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement

Beachten Sie, dass für SecurityBindingElements eine Vielzahl konfigurierbarer Einstellungen zur Verfügung stehen.Note that there are many configurable settings on the SecurityBindingElements. Weitere Informationen finden Sie unterFor more information, seeSecurityBindingElement-Authentifizierungsmodi. SecurityBindingElement Authentication Modes.

Weitere Informationen finden Sie unterFor more information, seeSichere Unterhaltungen und sichere Sitzungen. Secure Conversations and Secure Sessions.

VerfahrenProcedures

So erstellen Sie eine benutzerdefinierte Bindung mit dem SymmetricSecurityBindingElementTo create a custom binding that uses a SymmetricSecurityBindingElement

  1. Erstellen Sie eine Instanz der BindingElementCollection-Klasse mit dem Namen outputBec.Create an instance of the BindingElementCollection class with the name outputBec.

  2. Rufen Sie die statische M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)-Methode auf, durch die eine Instanz der SymmetricSecurityBindingElement-Klasse zurückgegeben wird.Call the static method M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), which returns an instance of the SymmetricSecurityBindingElement class.

  3. Fügen Sie das SymmetricSecurityBindingElement zur Sammlung hinzu (outputBec), indem Sie die Add-Methode der Collection<T> der BindingElement-Klasse aufrufen.Add the SymmetricSecurityBindingElement to the collection (outputBec) by calling the Add method of the Collection<T> of BindingElement class.

  4. Erstellen Sie eine Instanz der TextMessageEncodingBindingElement-Klasse, und fügen Sie diese der Sammlung hinzu (outputBec).Create an instance of the TextMessageEncodingBindingElement class and add it to the collection (outputBec). Dies gibt die von der Bindung verwendete Codierung an.This specifies the encoding used by the binding.

  5. Erstellen Sie ein HttpTransportBindingElement, und fügen Sie es der Sammlung hinzu (outputBec).Create a HttpTransportBindingElement and add it to the collection (outputBec). Dadurch wird angegeben, dass die Bindung den HTTP-Transport nutzt.This specifies that the binding uses the HTTP transport.

  6. Erstellen Sie eine neue benutzerdefinierte Bindung, indem Sie eine Instanz der CustomBinding-Klasse erstellen und die Sammlung outputBec an den Konstruktor weitergeben.Create a new custom binding by creating an instance of the CustomBinding class and passing the collection outputBec to the constructor.

  7. Die resultierenden benutzerdefinierten Bindungen teilen sich viele Eigenschaften mit dem Standard WSHttpBinding.The resulting custom binding shares many of the same characteristics as the standard WSHttpBinding. Sicherheit wird auf Nachrichtenebene und Windows-Anmeldeinformationen festgelegt, aber sichere Sitzungen werden deaktiviert, eine Out-of-Band-Festlegung der Dienstanmeldeinformationen ist erforderlich und Signaturen werden nicht verschlüsselt.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. Die letzte kann nur durch Festlegen der MessageProtectionOrder-Eigenschaft gesteuert werden, wie in Schritt 4 angezeigt.The last can be controlled only by setting the MessageProtectionOrder property as shown in step 4. Die anderen beiden können über Einstellungen auf der Standardbindung kontrolliert werden.The other two can be controlled using settings on the standard binding.

BeispielExample

BeschreibungDescription

Das folgende Beispiel veranschaulicht eine vollständige Funktion zur Erstellung einer benutzerdefinierten Bindung, die ein SymmetricSecurityBindingElement nutzt.The following example provides a complete function to create a custom binding that uses a SymmetricSecurityBindingElement.

CodeCode

// 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

Siehe auchSee Also

SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding
Erweitern von BindungenExtending Bindings
Vom System bereitgestellte BindungenSystem-Provided Bindings