Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
Utwórz wystąpienie klasy BindingElementCollection o nazwie
outputBec.Wywołaj metodę
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)statyczną , która zwraca wystąpienie SymmetricSecurityBindingElement klasy .Dodaj element SymmetricSecurityBindingElement do kolekcji (
outputBec), wywołując metodęAddobiektu Collection<T> klasy BindingElement.Utwórz wystąpienie TextMessageEncodingBindingElement klasy i dodaj je do kolekcji (
outputBec). Określa kodowanie używane przez powiązanie.Utwórz obiekt HttpTransportBindingElement i dodaj go do kolekcji (
outputBec). Określa to, że powiązanie używa transportu HTTP.Utwórz nowe powiązanie niestandardowe, tworząc wystąpienie CustomBinding klasy i przekazując kolekcję
outputBecdo konstruktora.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