Anvisningar: Skapa en anpassad bindning med SecurityBindingElement
Windows Communication Foundation (WCF) innehåller flera systembaserade bindningar som kan konfigureras men som inte ger fullständig flexibilitet när du konfigurerar alla säkerhetsalternativ som WCF stöder. Det här avsnittet visar hur du skapar en anpassad bindning direkt från enskilda bindningselement och visar några av de säkerhetsinställningar som kan anges när du skapar en sådan bindning. Mer information om hur du skapar anpassade bindningar finns i Utöka bindningar.
Varning
SecurityBindingElement stöder inte kanalformen IDuplexSessionChannel , som är standardkanalformen som används av TCP-transporten när TransferMode den är inställd på Buffered. Du måste ange TransferMode till Streamed för att kunna använda SecurityBindingElement i det här scenariot.
Skapa en anpassad bindning
I WCF består alla bindningar av bindningselement. Varje bindningselement härleds från BindingElement klassen. För standardbindningar som tillhandahålls av systemet skapas och konfigureras bindningselementen åt dig, även om du kan anpassa vissa av egenskapsinställningarna.
För att skapa en anpassad bindning skapas och konfigureras däremot bindningselement och en CustomBinding skapas från bindningselementen.
Det gör du genom att lägga till de enskilda bindningselementen i en samling som representeras av en instans av BindingElementCollection klassen och sedan ange Elements
egenskapen CustomBinding
lika med objektet. Du måste lägga till bindningselementen i följande ordning: Transaktionsflöde, Tillförlitlig session, säkerhet, sammansatt duplex, enkelriktad, Stream Security, Meddelandekodning och Transport. Observera att inte alla bindningselement som anges krävs i varje bindning.
SecurityBindingElement
Tre bindningselement relaterar till säkerhet på meddelandenivå, som alla härleds SecurityBindingElement från klassen. De tre är TransportSecurityBindingElement, SymmetricSecurityBindingElementoch AsymmetricSecurityBindingElement. TransportSecurityBindingElement Används för att tillhandahålla säkerhet i blandat läge. De andra två elementen används när meddelandelagret ger säkerhet.
Ytterligare klasser används när säkerhet på transportnivå tillhandahålls:
Obligatoriska bindningselement
Det finns ett stort antal möjliga bindningselement som kan kombineras till en bindning. Alla dessa kombinationer är inte giltiga. I det här avsnittet beskrivs de nödvändiga element som måste finnas i en säkerhetsbindning.
Giltiga säkerhetsbindningar beror på många faktorer, inklusive följande:
Säkerhetsläge.
Transportprotokoll.
Det meddelandeutbytesmönster (MEP) som anges i kontraktet.
I följande tabell visas giltiga konfigurationer av bindningselementstacken för varje kombination av föregående faktorer. Observera att detta är minimala krav. Du kan lägga till ytterligare bindningselement i bindningen, till exempel bindningselement för meddelandekodning, transaktionsbindningselement och andra bindningselement.
Säkerhetsläge | Transport | Exchange-mönster för kontraktmeddelande | Exchange-mönster för kontraktmeddelande | Exchange-mönster för kontraktmeddelande |
---|---|---|---|---|
Datagram |
Request Reply |
Duplex |
||
Transport | Https | |||
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | ||||
OneWayBindingElement | ||||
SSL eller Windows StreamSecurityBindingElement | SSL eller Windows StreamSecurityBindingElement | SSL eller Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
Meddelande | Http | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement (autentiseringsläge = SecureConversation) |
CompositeDuplexBindingElement | ||||
OneWayBindingElement | OneWayBindingElement | |||
HttpTransportBindingElement | HttpTransportBindingElement | HttpTransportBindingElement | ||
Tcp | SecurityBindingElement | SecurityBindingElement | SymmetricSecurityBindingElement (autentiseringsläge = SecureConversation) | |
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
Blandat (transport med meddelandeautentiseringsuppgifter) | Https | TransportSecurityBindingElement | TransportSecurityBindingElement | |
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | TransportSecurityBindingElement | SymmetricSecurityBindingElement (autentiseringsläge = SecureConversation) | SymmetricSecurityBindingElement (autentiseringsläge = SecureConversation) | |
OneWayBindingElement | ||||
SSL eller Windows StreamSecurityBindingElement | SSL eller Windows StreamSecurityBindingElement | SSL eller Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement |
Observera att det finns många konfigurerbara inställningar på SecurityBindingElements. Mer information finns i SecurityBindingElement-autentiseringslägen.
Mer information finns i Säkra konversationer och säkra sessioner.
Förfaranden
Skapa en anpassad bindning som använder SymmetricSecurityBindingElement
Skapa en instans av BindingElementCollection klassen med namnet
outputBec
.Anropa den statiska metoden
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)
, som returnerar en instans av SymmetricSecurityBindingElement klassen.SymmetricSecurityBindingElement Lägg till i samlingen (
outputBec
) genom att anropaAdd
-metoden för Collection<T>BindingElement klassen.Skapa en instans av TextMessageEncodingBindingElement klassen och lägg till den i samlingen (
outputBec
). Detta anger den kodning som används av bindningen.Skapa en HttpTransportBindingElement och lägg till den i samlingen (
outputBec
). Detta anger att bindningen använder HTTP-transporten.Skapa en ny anpassad bindning genom att skapa en instans av CustomBinding klassen och skicka samlingen
outputBec
till konstruktorn.Den resulterande anpassade bindningen delar många av samma egenskaper som standarden WSHttpBinding. Den anger säkerhet på meddelandenivå och Windows-autentiseringsuppgifter men inaktiverar säkra sessioner, kräver att tjänstens autentiseringsuppgifter anges out-of-band och inte krypterar signaturer. Den sista kan endast styras genom att ange egenskapen enligt beskrivningen MessageProtectionOrder i steg 4. De andra två kan styras med hjälp av inställningar för standardbindningen.
Exempel
beskrivning
I följande exempel finns en fullständig funktion för att skapa en anpassad bindning som använder en 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