Instrukcje: tworzenie niestandardowego wiązania za pomocą elementu SecurityBindingElementHow to: Create a Custom Binding Using the SecurityBindingElement

Windows Communication Foundation (WCF) zawiera kilka powiązań dostarczonych przez system, które można skonfigurować, ale nie zapewniają pełnej elastyczności podczas konfigurowania wszystkich opcji zabezpieczeń obsługiwanych przez funkcję WCF.Windows Communication Foundation (WCF) includes several system-provided bindings that can be configured but do not provide full flexibility when configuring all the security options that WCF supports. W tym temacie pokazano, jak utworzyć niestandardowe powiązanie bezpośrednio z poszczególnych elementów powiązania i podświetlić niektóre ustawienia zabezpieczeń, które można określić podczas tworzenia takiego powiązania.This topic demonstrates how to create a custom binding directly from individual binding elements and highlights some of the security settings that can be specified when creating such a binding. Aby uzyskać więcej informacji na temat tworzenia powiązań niestandardowych, zobacz Rozszerzanie powiązań.For more information about creating custom bindings, see Extending Bindings.

Ostrzeżenie

SecurityBindingElement nie obsługuje IDuplexSessionChannel kształtu kanału, czyli domyślnego kształtu kanału, który jest używany przez transport TCP, gdy TransferMode jest ustawiony na Buffered .SecurityBindingElement does not support the IDuplexSessionChannel channel shape, which is the default channel shape use by the TCP transport when TransferMode is set to Buffered. Aby można było TransferMode Streamed użyć SecurityBindingElement w tym scenariuszu, należy ustawić wartość.You must set TransferMode to Streamed in order to use SecurityBindingElement in this scenario.

Tworzenie niestandardowego powiązaniaCreating a Custom Binding

W programie WCF wszystkie powiązania składają się z elementów powiązania.In WCF all bindings are made up of binding elements. Każdy element powiązania pochodzi od BindingElement klasy.Each binding element derives from the BindingElement class. 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.For the standard system-provided bindings, the binding elements are created and configured for you, although you can customize some of the property settings.

W przeciwieństwie do tworzenia niestandardowego powiązania, elementy powiązania są tworzone i konfigurowane oraz CustomBinding tworzony jest z elementów powiązania.In contrast, to create a custom binding, binding elements are created and configured and a CustomBinding is created from the binding elements.

W tym celu należy dodać pojedyncze elementy powiązania do kolekcji reprezentowanej przez wystąpienie BindingElementCollection klasy, a następnie ustawić Elements Właściwość CustomBinding równą temu obiektowi.To do this, you add the individual binding elements to a collection represented by an instance of the BindingElementCollection class, and then set the Elements property of the CustomBinding equal to that object. Należy dodać elementy powiązania w następującej kolejności: przepływ transakcji, Niezawodna sesja, zabezpieczenia, kompozytowy dupleks, jednokierunkowe, zabezpieczenia strumienia, kodowanie komunikatów i transport.You must add the binding elements in the following order: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding, and Transport. Należy zauważyć, że nie wszystkie elementy powiązania wymienione w każdym powiązaniu są wymagane.Note that not all the binding elements listed are required in every binding.

SecurityBindingElementSecurityBindingElement

Trzy elementy powiązań odnoszą się do zabezpieczeń na poziomie komunikatów, z których wszystkie pochodzą z SecurityBindingElement klasy.Three binding elements relate to message level security, all of which derive from the SecurityBindingElement class. Trzy TransportSecurityBindingElement , SymmetricSecurityBindingElement i AsymmetricSecurityBindingElement .The three are TransportSecurityBindingElement, SymmetricSecurityBindingElement, and AsymmetricSecurityBindingElement. Służy TransportSecurityBindingElement do zapewnienia zabezpieczeń w trybie mieszanym.The TransportSecurityBindingElement is used to provide Mixed mode security. Pozostałe dwa elementy są używane, gdy warstwa komunikatów zapewnia zabezpieczenia.The other two elements are used when the message layer provides security.

Dodatkowe klasy są używane, gdy zapewnione są zabezpieczenia na poziomie transportu:Additional classes are used when transport level security is provided:

Wymagane elementy powiązaniaRequired Binding Elements

Istnieje duża liczba możliwych do powiązania elementów, które można połączyć w powiązanie.There are a large number of possible binding elements that can be combined into a binding. Nie wszystkie te kombinacje są prawidłowe.Not all of these combinations are valid. W tej sekcji opisano wymagane elementy, które muszą być obecne w powiązaniu zabezpieczeń.This section describes the required elements that must be present in a security binding.

Prawidłowe powiązania zabezpieczeń są zależne od wielu czynników, w tym:Valid security bindings depend on many factors, including the following:

  • Tryb zabezpieczeń.Security mode.

  • Protokół transportowy.Transport protocol.

  • Wzorzec wymiany komunikatów (unikatowy MEP) określony w umowie.The message exchange pattern (MEP) specified in the contract.

W poniższej tabeli przedstawiono prawidłowe konfiguracje stosu elementów powiązania dla każdej kombinacji powyższych czynników.The following table shows the valid binding element stack configurations for each combination of the preceding factors. Należy pamiętać, że są to minimalne wymagania.Note that these are minimal requirements. Można dodać do powiązania dodatkowe elementy powiązania, takie jak elementy powiązania kodowania komunikatów, elementy powiązania transakcji i inne elementy powiązania.You can add additional binding elements to the binding, such as message encoding binding elements, transaction binding elements, and other binding elements.

Tryb zabezpieczeńSecurity Mode TransportTransport Wzorzec wymiany komunikatów kontraktuContract Message Exchange Pattern Wzorzec wymiany komunikatów kontraktuContract Message Exchange Pattern Wzorzec wymiany komunikatów kontraktuContract Message Exchange Pattern
Datagram Request Reply Duplex
TransportTransport SchematHttps
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP
OneWayBindingElementOneWayBindingElement
Protokół SSL lub StreamSecurityBindingElement systemu WindowsSSL or Windows StreamSecurityBindingElement Protokół SSL lub StreamSecurityBindingElement systemu WindowsSSL or Windows StreamSecurityBindingElement Protokół SSL lub StreamSecurityBindingElement systemu WindowsSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
KomunikatMessage HTTPHttp SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
CompositeDuplexBindingElementCompositeDuplexBindingElement
OneWayBindingElementOneWayBindingElement OneWayBindingElementOneWayBindingElement
HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement
TCPTcp SecurityBindingElementSecurityBindingElement SecurityBindingElementSecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
Mieszany (transport z poświadczeniami wiadomości)Mixed (transport with message credentials) SchematHttps TransportSecurityBindingElementTransportSecurityBindingElement TransportSecurityBindingElementTransportSecurityBindingElement
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP TransportSecurityBindingElementTransportSecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation) SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
OneWayBindingElementOneWayBindingElement
Protokół SSL lub StreamSecurityBindingElement systemu WindowsSSL or Windows StreamSecurityBindingElement Protokół SSL lub StreamSecurityBindingElement systemu WindowsSSL or Windows StreamSecurityBindingElement Protokół SSL lub StreamSecurityBindingElement systemu WindowsSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement

Należy pamiętać, że na SecurityBindingElements istnieje wiele konfigurowalnych ustawień.Note that there are many configurable settings on the SecurityBindingElements. Aby uzyskać więcej informacji, zobacz elementu SecurityBindingElement Authentication Modes.For more information, see SecurityBindingElement Authentication Modes.

Aby uzyskać więcej informacji, zobacz bezpieczne konwersacje i bezpieczne sesje.For more information, see Secure Conversations and Secure Sessions.

ProceduryProcedures

Tworzenie niestandardowego powiązania korzystającego z SymmetricSecurityBindingElementTo create a custom binding that uses a SymmetricSecurityBindingElement

  1. Utwórz wystąpienie BindingElementCollection klasy o nazwie outputBec .Create an instance of the BindingElementCollection class with the name outputBec.

  2. Wywołaj metodę statyczną M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true) , która zwraca wystąpienie SymmetricSecurityBindingElement klasy.Call the static method M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), which returns an instance of the SymmetricSecurityBindingElement class.

  3. Dodaj SymmetricSecurityBindingElement do kolekcji ( outputBec ) przez wywołanie Add metody Collection<T> BindingElement klasy.Add the SymmetricSecurityBindingElement to the collection (outputBec) by calling the Add method of the Collection<T> of BindingElement class.

  4. Utwórz wystąpienie TextMessageEncodingBindingElement klasy i Dodaj je do kolekcji ( outputBec ).Create an instance of the TextMessageEncodingBindingElement class and add it to the collection (outputBec). Określa kodowanie używane przez powiązanie.This specifies the encoding used by the binding.

  5. Utwórz HttpTransportBindingElement i dodaj go do kolekcji ( outputBec ).Create a HttpTransportBindingElement and add it to the collection (outputBec). Oznacza to, że powiązanie korzysta z transportu HTTP.This specifies that the binding uses the HTTP transport.

  6. Utwórz nowe niestandardowe powiązanie, tworząc wystąpienie CustomBinding klasy i przekazując kolekcję outputBec do konstruktora.Create a new custom binding by creating an instance of the CustomBinding class and passing the collection outputBec to the constructor.

  7. Wyniki niestandardowe powiązania mają wiele takich samych cech jak standard WSHttpBinding .The resulting custom binding shares many of the same characteristics as the standard WSHttpBinding. Określa zabezpieczenia na poziomie wiadomości i poświadczenia systemu Windows, ale wyłącza bezpieczne sesje, wymaga podania poświadczeń usługi poza pasmem i nie szyfruje podpisów.It specifies message-level security and Windows credentials but disables secure sessions, requires that the service credential be specified out-of-band, and does not encrypt signatures. Ostatni można kontrolować tylko przez ustawienie MessageProtectionOrder właściwości, jak pokazano w kroku 4.The last can be controlled only by setting the MessageProtectionOrder property as shown in step 4. Pozostałe dwa mogą być kontrolowane przy użyciu ustawień dla standardowego powiązania.The other two can be controlled using settings on the standard binding.

PrzykładExample

OpisDescription

Poniższy przykład zawiera kompletną funkcję do tworzenia niestandardowego powiązania, które używa SymmetricSecurityBindingElement .The following example provides a complete function to create a custom binding that uses a SymmetricSecurityBindingElement.

KodCode

// 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 teżSee also