Procedure: Een aangepaste binding maken met behulp van securityBindingElement
Windows Communication Foundation (WCF) bevat verschillende door het systeem geleverde bindingen die kunnen worden geconfigureerd, maar bieden geen volledige flexibiliteit bij het configureren van alle beveiligingsopties die WCF ondersteunt. In dit onderwerp wordt gedemonstreerd hoe u rechtstreeks vanuit afzonderlijke bindingselementen een aangepaste binding maakt en een aantal beveiligingsinstellingen markeert die kunnen worden opgegeven bij het maken van een dergelijke binding. Zie Uitbreidingsbindingen voor meer informatie over het maken van aangepaste bindingen.
Waarschuwing
SecurityBindingElement biedt geen ondersteuning voor de IDuplexSessionChannel kanaalshape. Dit is de standaardkanaalshape die door het TCP-transport wordt gebruikt wanneer TransferMode deze is ingesteld op Buffered. U moet deze optie instellen TransferModeStreamed om in dit scenario te kunnen worden gebruikt SecurityBindingElement .
Een aangepaste binding maken
In WCF bestaan alle bindingen uit bindingselementen. Elk bindingselement is afgeleid van de BindingElement klasse. Voor de standaard door het systeem geleverde bindingen worden de bindingselementen voor u gemaakt en geconfigureerd, hoewel u enkele eigenschapsinstellingen kunt aanpassen.
Als u daarentegen een aangepaste binding wilt maken, worden bindingselementen gemaakt en geconfigureerd en wordt er een CustomBinding gemaakt op basis van de bindingselementen.
Hiervoor voegt u de afzonderlijke bindingselementen toe aan een verzameling die wordt vertegenwoordigd door een exemplaar van de BindingElementCollection klasse en stelt u vervolgens de Elements
eigenschap van het CustomBinding
gelijk aan dat object in. U moet de bindingselementen toevoegen in de volgende volgorde: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding en Transport. Houd er rekening mee dat niet alle vermelde bindingselementen vereist zijn in elke binding.
SecurityBindingElement
Drie bindingselementen hebben betrekking op beveiliging op berichtniveau, die allemaal zijn afgeleid van de SecurityBindingElement klasse. De drie zijn TransportSecurityBindingElement, SymmetricSecurityBindingElementen AsymmetricSecurityBindingElement. De TransportSecurityBindingElement functie wordt gebruikt om beveiliging in de gemengde modus te bieden. De andere twee elementen worden gebruikt wanneer de berichtlaag beveiliging biedt.
Er worden extra klassen gebruikt wanneer beveiliging op transportniveau wordt geboden:
Vereiste bindingselementen
Er zijn een groot aantal mogelijke bindingselementen die kunnen worden gecombineerd tot een binding. Niet al deze combinaties zijn geldig. In deze sectie worden de vereiste elementen beschreven die aanwezig moeten zijn in een beveiligingsbinding.
Geldige beveiligingsbindingen zijn afhankelijk van veel factoren, waaronder de volgende:
Beveiligingsmodus.
Transportprotocol.
Het berichtuitwisselingspatroon (MEP) dat in het contract is opgegeven.
In de volgende tabel ziet u de geldige stackconfiguraties voor bindingselementen voor elke combinatie van de voorgaande factoren. Houd er rekening mee dat dit minimale vereisten zijn. U kunt extra bindingselementen toevoegen aan de binding, zoals berichtcoderingselementen, transactiebindingselementen en andere bindingselementen.
Beveiligingsmodus | Transport | Exchange-patroon contractberichten | Exchange-patroon contractberichten | Exchange-patroon contractberichten |
---|---|---|---|---|
Datagram |
Request Reply |
Duplex |
||
Transport | Https | |||
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | ||||
OneWayBindingElement | ||||
SSL of Windows StreamSecurityBindingElement | SSL of Windows StreamSecurityBindingElement | SSL of Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
Bericht | HTTP | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement (verificatiemodus = SecureConversation) |
CompositeDuplexBindingElement | ||||
OneWayBindingElement | OneWayBindingElement | |||
HttpTransportBindingElement | HttpTransportBindingElement | HttpTransportBindingElement | ||
TCP | SecurityBindingElement | SecurityBindingElement | SymmetricSecurityBindingElement (verificatiemodus = SecureConversation) | |
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
Gemengd (transport met berichtreferenties) | Https | TransportSecurityBindingElement | TransportSecurityBindingElement | |
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | TransportSecurityBindingElement | SymmetricSecurityBindingElement (verificatiemodus = SecureConversation) | SymmetricSecurityBindingElement (verificatiemodus = SecureConversation) | |
OneWayBindingElement | ||||
SSL of Windows StreamSecurityBindingElement | SSL of Windows StreamSecurityBindingElement | SSL of Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement |
Houd er rekening mee dat er veel configureerbare instellingen zijn voor securityBindingElements. Zie SecurityBindingElement-verificatiemodi voor meer informatie.
Zie Beveiligde gesprekken en beveiligde sessies voor meer informatie.
Procedures
Een aangepaste binding maken die gebruikmaakt van een SymmetricSecurityBindingElement
Maak een exemplaar van de BindingElementCollection klasse met de naam
outputBec
.Roep de statische methode
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)
aan, die een exemplaar van de SymmetricSecurityBindingElement klasse retourneert.Voeg de SymmetricSecurityBindingElement verzameling (
outputBec
) toe door deAdd
methode van BindingElement de Collection<T> klasse aan te roepen.Maak een exemplaar van de TextMessageEncodingBindingElement klasse en voeg deze toe aan de verzameling (
outputBec
). Hiermee geeft u de codering op die door de binding wordt gebruikt.Maak een HttpTransportBindingElement en voeg deze toe aan de verzameling (
outputBec
). Hiermee geeft u op dat de binding gebruikmaakt van het HTTP-transport.Maak een nieuwe aangepaste binding door een exemplaar van de CustomBinding klasse te maken en de verzameling
outputBec
door te geven aan de constructor.De resulterende aangepaste binding deelt veel van dezelfde kenmerken als de standaard WSHttpBinding. Hiermee geeft u beveiliging op berichtniveau en Windows-referenties op, maar worden beveiligde sessies uitgeschakeld, moet de servicereferentie out-of-band worden opgegeven en worden handtekeningen niet versleuteld. De laatste kan alleen worden bepaald door de MessageProtectionOrder eigenschap in te stellen, zoals wordt weergegeven in stap 4. De andere twee kunnen worden beheerd met behulp van instellingen voor de standaardbinding.
Opmerking
Beschrijving
Het volgende voorbeeld bevat een volledige functie voor het maken van een aangepaste binding die gebruikmaakt van een 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