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 finden Sie unterErstellen von benutzerdefinierten Bindungen finden Sie unter Erweitern von Bindungen.

Warnung

SecurityBindingElement unterstützt nicht die IDuplexSessionChannel channel-Form, die die Verwendung für die Form von Kanal vom TCP ist beim transport TransferMode auf festgelegt ist Buffered. Sie müssen festlegen, TransferMode auf Streamed zur Verwendung SecurityBindingElement in diesem Szenario.

Erstellen einer benutzerdefinierten Bindung

In WCF Alle Bindungen bestehen aus Bindungselementen. Jedes Bindungselement leitet sich von der BindingElement Klasse. 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 zum Erstellen einer benutzerdefinierten Bindung Bindungselemente erstellt und konfiguriert werden und ein CustomBinding aus den Bindungselementen erstellt wird.

Zu diesem Zweck fügen Sie die einzelnen Bindungselemente einer Auflistung dargestellt, die von einer Instanz von der BindingElementCollection Klasse, und legen Sie dann die Elements Eigenschaft der CustomBinding auf dieses Objekt. 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, leiten Sie die von der SecurityBindingElement Klasse. Die drei sind TransportSecurityBindingElement, SymmetricSecurityBindingElement, und AsymmetricSecurityBindingElement. Die TransportSecurityBindingElement wird verwendet, um die Sicherheit im gemischten Modus. 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 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
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 unterSecurityBindingElement-Authentifizierungsmodi.

Weitere Informationen finden Sie unterSichere Konversationen und sichere Sitzungen.

Verfahren

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 Methode M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), womit eine Instanz von der SymmetricSecurityBindingElement Klasse.

  3. Hinzufügen der SymmetricSecurityBindingElement der Auflistung (outputBec) durch Aufrufen der Add Methode der Collection<T> von BindingElement Klasse.

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

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

  6. Erstellen Sie eine neue benutzerdefinierte Bindung durch Erstellen einer Instanz von der CustomBinding -Klasse, und übergeben die Auflistung outputBec an den Konstruktor.

  7. Die resultierende benutzerdefinierte Bindungen teilen sich viele Eigenschaften, die als 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 gesteuert werden, nur durch Festlegen der MessageProtectionOrder -Eigenschaft 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 um eine benutzerdefinierte Bindung erstellen, verwendet eine 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

Siehe auch

SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding
Erweitern von Bindungen
Vom System bereitgestellte Bindungen