Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement

Windows Communication Foundation (WCF) enthält mehrere vom System bereitgestellte Bindungen, die konfiguriert werden können, aber nicht die volle Flexibilität bei der Konfiguration aller von WCF unterstützten Sicherheitsoptionen bieten. 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. Weitere Informationen zum Erstellen von benutzerdefinierten Bindungen finden Sie unter Erweitern von Bindungen.

Warnung

SecurityBindingElement unterstützt die IDuplexSessionChannel-Kanalform nicht, die der standardmäßig vom TCP-Transport verwendeten Kanalform entspricht, wenn TransferMode auf Buffered festgelegt ist. Sie müssen TransferMode auf Streamed festlegen, um SecurityBindingElement in diesem Szenario verwenden.

Erstellen einer benutzerdefinierten Bindung

In WCF bestehen alle Bindungen aus Bindungselementen. Jedes Bindungselement wird von der BindingElement-Klasse abgeleitet. 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.

Im Gegensatz dazu werden zum Erstellen einer benutzerdefinierten Bindung Bindungselemente erstellt und konfiguriert, und aus den Bindungselementen wird eine CustomBinding erstellt.

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. Die Bindungselemente müssen in der folgenden Reihenfolge hinzugefügt werden: Transaktionsfluss, zuverlässige Sitzung, Sicherheit, Composite Duplex, Unidirektional, Streamsicherheit, Nachrichtencodierung und Transport. Beachten Sie, dass nicht alle aufgelisteten Bindungselemente in jeder Bindung erforderlich sind.

SecurityBindingElement

Drei Bindungselemente beziehen sich auf die Sicherheit auf Nachrichtenebene, wobei alle von der SecurityBindingElement-Klasse abgeleitet werden. Die drei sind TransportSecurityBindingElement, SymmetricSecurityBindingElement und AsymmetricSecurityBindingElement. Das TransportSecurityBindingElement wird für Sicherheit im gemischten Modus verwendet. Die anderen beiden Elemente werden verwendet, wenn die Nachrichtenebene Sicherheit bereitstellt.

Zusätzliche Klassen werden verwendet, wenn Sicherheit auf Transportebene bereitgestellt wird:

Erforderliche Bindungselemente

Es gibt eine große Anzahl von möglichen Bindungselementen, die zu einer Bindung kombiniert werden können. Nicht alle Kombinationen sind zulässig. In diesem Abschnitt werden die für eine Sicherheitsbindung erforderlichen Elemente beschrieben.

Gültige Sicherheitsbindungen hängen von vielen Faktoren ab, unter anderem von folgenden:

  • Sicherheitsmodus

  • Transportprotokoll

  • Das im Vertrag angegebene Nachrichtenaustauschmuster (MEP)

Die folgende Tabelle enthält die gültigen Konfigurationen von Bindungselementstapeln für jede Kombination der oben genannten Faktoren. Beachten Sie, dass es sich herbei um Mindestanforderungen handelt. Sie können der Bindung weitere Bindungselemente hinzufügen (beispielsweise Elemente zur Nachrichtencodierung, Transaktionsbindungselemente usw.).

Sicherheitsmodus Transport Nachrichtenaustauschmuster des Vertrags Nachrichtenaustauschmuster des Vertrags Nachrichtenaustauschmuster des Vertrags
Datagram Request Reply Duplex
Transport HTTPS
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP
OneWayBindingElement
SSL oder Windows-StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
`Message` Http SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation)
CompositeDuplexBindingElement
OneWayBindingElement OneWayBindingElement
HttpTransportBindingElement HttpTransportBindingElement HttpTransportBindingElement
TCP SecurityBindingElement SecurityBindingElement SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Gemischt (Transport mit Nachrichtenanmeldeinformationen) HTTPS TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP TransportSecurityBindingElement SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation) SymmetricSecurityBindingElement (Authentifizierungsmodus = SecureConversation)
OneWayBindingElement
SSL oder Windows-StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElement SSL oder Windows-StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

Beachten Sie, dass für SecurityBindingElements eine Vielzahl konfigurierbarer Einstellungen zur Verfügung stehen. Weitere Informationen finden Sie unter SecurityBindingElement-Authentifizierungsmodi.

Weitere Informationen finden Sie unter Sichere Konversationen und sichere Sitzungen.

Prozeduren

So erstellen Sie eine benutzerdefinierte Bindung mit dem SymmetricSecurityBindingElement

  1. Erstellen Sie eine Instanz der BindingElementCollection-Klasse mit dem Namen 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.

  3. Fügen Sie das SymmetricSecurityBindingElement zur Sammlung hinzu (outputBec), indem Sie die Add-Methode der Collection<T> der BindingElement-Klasse aufrufen.

  4. Erstellen Sie eine Instanz der TextMessageEncodingBindingElement-Klasse, und fügen Sie diese der Sammlung hinzu (outputBec). Dies gibt die von der Bindung verwendete Codierung an.

  5. Erstellen Sie ein HttpTransportBindingElement, und fügen Sie es der Sammlung hinzu (outputBec). Dadurch wird angegeben, dass die Bindung den HTTP-Transport nutzt.

  6. Erstellen Sie eine neue benutzerdefinierte Bindung, indem Sie eine Instanz der CustomBinding-Klasse erstellen und die Sammlung outputBec an den Konstruktor weitergeben.

  7. Die resultierenden benutzerdefinierten Bindungen teilen sich viele Eigenschaften mit dem 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. Die letzte kann nur durch Festlegen der MessageProtectionOrder-Eigenschaft gesteuert werden, wie in Schritt 4 angezeigt. Die anderen beiden können über Einstellungen auf der Standardbindung kontrolliert werden.

Beispiel

Beschreibung

Das folgende Beispiel veranschaulicht eine vollständige Funktion zur Erstellung einer benutzerdefinierten Bindung, die ein SymmetricSecurityBindingElement nutzt.

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

Siehe auch