Instrukcje: tworzenie niestandardowego powiązania przy użyciu elementu SecurityBindingElement

Program Windows Communication Foundation (WCF) zawiera kilka powiązań dostarczanych przez system, które można skonfigurować, ale nie zapewniają pełnej elastyczności podczas konfigurowania wszystkich opcji zabezpieczeń, które obsługuje program WCF. W tym temacie pokazano, jak utworzyć powiązanie niestandardowe bezpośrednio z poszczególnych elementów powiązania i wyróżnić niektóre ustawienia zabezpieczeń, które można określić podczas tworzenia takiego powiązania. Aby uzyskać więcej informacji na temat tworzenia powiązań niestandardowych, zobacz Rozszerzanie powiązań.

Ostrzeżenie

SecurityBindingElement nie obsługuje kształtu kanału IDuplexSessionChannel, który jest domyślnym kształtem kanału używanym przez transport TCP, gdy TransferMode jest ustawiony na wartość Buffered. Aby używać SecurityBindingElement w tym scenariuszu, należy ustawić TransferMode na Streamed.

Tworzenie powiązania niestandardowego

W programie WCF wszystkie powiązania składają się z elementów powiązania. Każdy element powiązania pochodzi z BindingElement klasy . W przypadku standardowych powiązań dostarczanych przez system elementy powiązania są tworzone i konfigurowane dla Ciebie, chociaż można dostosować niektóre ustawienia właściwości.

Natomiast w celu utworzenia powiązania niestandardowego elementy powiązania są tworzone i konfigurowane, a element CustomBinding jest tworzony na podstawie elementów powiązania.

W tym celu należy dodać poszczególne elementy powiązania do kolekcji reprezentowanej przez instancję klasy BindingElementCollection, a następnie ustawić właściwość Elements w CustomBinding równą temu obiektowi. Należy dodać elementy powiązania w następującej kolejności: Przepływ transakcji, Niezawodna sesja, Bezpieczeństwo, Duplex złożony, Jednokierunkowy, Bezpieczeństwo strumienia, Kodowanie wiadomości i Transport. Należy pamiętać, że nie wszystkie wymienione elementy powiązania są wymagane w każdym powiązaniu.

Securitybindingelement

Trzy elementy powiązania odnoszą się do zabezpieczeń na poziomie komunikatów, z których wszystkie pochodzą z klasy SecurityBindingElement. Te trzy to TransportSecurityBindingElement, SymmetricSecurityBindingElementi AsymmetricSecurityBindingElement. Element TransportSecurityBindingElement służy do zapewnienia zabezpieczeń trybu mieszanego. Pozostałe dwa elementy są używane, gdy warstwa komunikatów zapewnia zabezpieczenia.

Dodatkowe klasy są używane, gdy zapewnia się bezpieczeństwo na poziomie transportu.

Wymagane elementy wiązania

Istnieje duża liczba możliwych elementów powiązania, które można połączyć w powiązanie. Nie wszystkie te kombinacje są prawidłowe. W tej sekcji opisano wymagane elementy, które muszą znajdować się w powiązaniu zabezpieczeń.

Prawidłowe powiązania zabezpieczeń zależą od wielu czynników, w tym następujących:

  • Tryb zabezpieczeń.

  • Protokół transportowy.

  • Wzorzec wymiany komunikatów (MEP) określony w umowie.

W poniższej tabeli przedstawiono prawidłowe konfiguracje stosu elementów powiązania dla każdej kombinacji powyższych czynników. Należy pamiętać, że są to minimalne wymagania. Do powiązania można dodać dodatkowe elementy powiązania, takie jak elementy powiązania kodowania komunikatów, elementy powiązania transakcji i inne elementy powiązania.

Tryb zabezpieczeń Transport Wzorzec wymiany komunikatów kontraktu Wzorzec wymiany komunikatów zgodnie z kontraktem Wzorzec wymiany komunikatów kontraktu
Datagram Request Reply Duplex
Transport Https
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP
OneWayBindingElement
Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Message HTTP SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)
CompositeDuplexBindingElement
OneWayBindingElement OneWayBindingElement
HttpTransportBindingElement HttpTransportBindingElement HttpTransportBindingElement
Tcp Securitybindingelement Securitybindingelement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Mieszane (transport z poświadczeniami komunikacyjnymi) Https TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP TransportSecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation) SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)
OneWayBindingElement
Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

Należy pamiętać, że w elementach SecurityBindingElements istnieje wiele konfigurowalnych ustawień. Aby uzyskać więcej informacji, zobacz SecurityBindingElement Authentication Modes (Tryby uwierzytelniania SecurityBindingElement).

Aby uzyskać więcej informacji, zobacz Bezpieczne konwersacje i bezpieczne sesje.

Procedures

Aby utworzyć powiązanie niestandardowe używające elementu SymmetricSecurityBindingElement

  1. Utwórz wystąpienie klasy BindingElementCollection o nazwie outputBec.

  2. Wywołaj metodę M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)statyczną , która zwraca wystąpienie SymmetricSecurityBindingElement klasy .

  3. Dodaj element SymmetricSecurityBindingElement do kolekcji (outputBec), wywołując metodę Add obiektu Collection<T> klasy BindingElement.

  4. Utwórz wystąpienie TextMessageEncodingBindingElement klasy i dodaj je do kolekcji (outputBec). Określa kodowanie używane przez powiązanie.

  5. Utwórz obiekt HttpTransportBindingElement i dodaj go do kolekcji (outputBec). Określa to, że powiązanie używa transportu HTTP.

  6. Utwórz nowe powiązanie niestandardowe, tworząc wystąpienie CustomBinding klasy i przekazując kolekcję outputBec do konstruktora.

  7. Wynikowe powiązanie niestandardowe współdzieli wiele tych samych cech jak standard WSHttpBinding. Określa zabezpieczenia na poziomie komunikatu i poświadczenia systemu Windows, ale wyłącza bezpieczne sesje, wymaga podania poświadczeń usługi poza pasmem i nie szyfruje podpisów. Ostatni element może być kontrolowany tylko przez ustawienie MessageProtectionOrder właściwości, jak pokazano w kroku 4. Pozostałe dwa można kontrolować przy użyciu ustawień standardowego wiązania.

Przykład

Opis

W poniższym przykładzie przedstawiono pełną funkcję umożliwiającą utworzenie powiązania niestandardowego używającego elementu 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

Zobacz także