Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Communication Foundation (WCF) enthält mehrere vom System bereitgestellte Bindungen, die konfiguriert werden können, aber keine volle Flexibilität beim Konfigurieren aller von WCF unterstützten Sicherheitsoptionen bieten. In diesem Thema wird veranschaulicht, wie Sie eine benutzerdefinierte Bindung direkt aus einzelnen Bindungselementen erstellen und einige der Sicherheitseinstellungen hervorgehoben, die beim Erstellen einer solchen Bindung angegeben werden können. Weitere Informationen zum Erstellen von benutzerdefinierten Bindungen finden Sie unter Erweitern von Bindungen.
Warnung
SecurityBindingElement unterstützt die Kanalform IDuplexSessionChannel nicht, welche die standardmäßige Kanalform des TCP-Transports ist, wenn TransferMode auf Buffered festgelegt ist. Um SecurityBindingElement in diesem Szenario verwenden zu können, müssen Sie TransferMode auf Streamed einstellen.
Erstellen einer benutzerdefinierten Bindung
In WCF bestehen alle Bindungen aus Bindungselementen. Jedes Bindungselement wird von der BindingElement Klasse abgeleitet. Für die standardmäßigen vom System bereitgestellten Bindungen werden die Bindungselemente für Sie erstellt und konfiguriert, obwohl Sie einige der Eigenschafteneinstellungen anpassen können.
Im Gegensatz dazu werden zum Erstellen einer benutzerdefinierten Bindung Bindungselemente erstellt und konfiguriert und eine CustomBinding aus den Bindungselementen erstellt.
Dazu fügen Sie die einzelnen Bindungselemente zu einer Auflistung hinzu, die durch eine Instanz der BindingElementCollection-Klasse dargestellt wird, und legen Sie dann die Elements-Eigenschaft des CustomBinding gleich diesem Objekt fest. Sie müssen die Bindungselemente in der folgenden Reihenfolge hinzufügen: Transaktionsfluss, zuverlässige Sitzung, Sicherheit, Composite Duplex, Unidirektional, Streamsicherheit, Nachrichtencodierung und Transport. Beachten Sie, dass nicht alle aufgeführten Bindungselemente in jeder Bindung erforderlich sind.
Securitybindingelement
Drei Bindungselemente beziehen sich auf die Sicherheit auf Nachrichtenebene, die alle von der SecurityBindingElement Klasse abgeleitet sind. Die drei sind TransportSecurityBindingElement, SymmetricSecurityBindingElementund AsymmetricSecurityBindingElement. Dies TransportSecurityBindingElement wird verwendet, um Sicherheit im gemischten Modus bereitzustellen. Die anderen beiden Elemente werden verwendet, wenn die Nachrichtenebene Sicherheit bietet.
Zusätzliche Klassen werden verwendet, wenn Sicherheit auf Transportebene bereitgestellt wird:
Erforderliche Bindungselemente
Es gibt eine große Anzahl möglicher Bindungselemente, die in eine Bindung kombiniert werden können. Nicht alle diese Kombinationen sind gültig. In diesem Abschnitt werden die erforderlichen Elemente beschrieben, die in einer Sicherheitsbindung vorhanden sein müssen.
Gültige Sicherheitsbindungen sind von vielen Faktoren abhängig, einschließlich der folgenden:
Sicherheitsmodus.
Transportprotokoll
Das im Vertrag angegebene Nachrichtenaustauschmuster (MEP).
Die folgende Tabelle zeigt die gültigen Konfigurationen des Bindungselementstapels für jede Kombination der vorherigen Faktoren. Beachten Sie, dass dies minimale Anforderungen sind. Sie können der Bindung zusätzliche Bindungselemente hinzufügen, z. B. Nachrichtencodierungsbindungselemente, Transaktionsbindungselemente und andere Bindungselemente.
| Sicherheitsmodus | Transport | Austauschmuster für Vertragsnachrichten | Austauschmuster für Vertragsnachrichten | Nachrichtenaustauschmuster für Verträge |
|---|---|---|---|---|
Datagram |
Request Reply |
Duplex |
||
| Transport | Https | |||
| OneWayBindingElement | ||||
| HttpsTransportBindingElement | HttpsTransportBindingElement | |||
| TCP | ||||
| OneWayBindingElement | ||||
| SSL oder Windows StreamSecurityBindingElement | SSL oder das 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 | ||
| Kombiniert (Übertragung mit Nachrichtenberechtigungen) | 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 es viele konfigurierbare Einstellungen für die SecurityBindingElements gibt. Weitere Informationen finden Sie unter SecurityBindingElement-Authentifizierungsmodi.
Weitere Informationen finden Sie unter "Sichere Unterhaltungen und sichere Sitzungen".
Prozeduren
So erstellen Sie eine benutzerdefinierte Bindung, die ein SymmetricSecurityBindingElement verwendet
Erstellen Sie eine Instanz der BindingElementCollection Klasse mit dem Namen
outputBec.Rufen Sie die statische Methode
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)auf, die eine Instanz der SymmetricSecurityBindingElement Klasse zurückgibt.Fügen Sie das SymmetricSecurityBindingElement der Sammlung (
outputBec) hinzu, indem Sie dieAdd-Methode der Collection<T>-Klasse von BindingElement aufrufen.Erstellen Sie eine Instanz der TextMessageEncodingBindingElement Klasse, und fügen Sie sie der Auflistung (
outputBec) hinzu. Dadurch wird die Codierung angegeben, die von der Bindung verwendet wird.Erstellen Sie ein Objekt HttpTransportBindingElement , und fügen Sie es der Sammlung (
outputBec) hinzu. Dadurch wird angegeben, dass die Bindung den HTTP-Transport verwendet.Erstellen Sie eine neue benutzerdefinierte Bindung, indem Sie eine Instanz der CustomBinding Klasse erstellen und die Auflistung
outputBecan den Konstruktor übergeben.Die resultierende benutzerdefinierte Bindung teilt viele der gleichen Merkmale wie der Standard WSHttpBinding. Es legt Nachrichtensicherheit und Windows-Anmeldeinformationen fest, deaktiviert aber sichere Sitzungen, erfordert, dass die Dienstanmeldeinformationen außerhalb der regulären Datenübertragung angegeben werden, und verschlüsselt Signaturen nicht. Die letzte kann nur durch Festlegen der MessageProtectionOrder Eigenschaft gesteuert werden, wie in Schritt 4 dargestellt. Die anderen beiden können mithilfe von Einstellungen für die Standardbindung gesteuert werden.
Beispiel
Beschreibung
Im folgenden Beispiel wird eine vollständige Funktion zum Erstellen einer benutzerdefinierten Bindung dargestellt, die eine SymmetricSecurityBindingElement verwendet.
Programmcode
// 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