Freigeben über


Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement

Windows Communication Foundation (WCF) enthält diverse, vom System bereitgestellte und konfigurierbare Bindungen, die jedoch in Bezug auf die Konfiguration aller Optionen, die WCF unterstützt, nicht die volle Flexibilität aufweisen. 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 über zur Erstellung benutzerdefinierter Bindungen finden Sie unter Erweitern von Bindungen.

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 (beispielsweise Elemente zur Nachrichtencodierung, Transaktionsbindungselemente usw.) hinzufügen.

Sicherheitsmodus Transport 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

Meldung

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

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

Siehe auch

Verweis

SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding

Konzepte

Vom System bereitgestellte Bindungen

Weitere Ressourcen

Erweitern von Bindungen