Como: criar uma associação personalizada utilizando o SecurityBindingElementHow to: Create a Custom Binding Using the SecurityBindingElement

O Windows Communication Foundation (WCF) inclui várias associações fornecidas pelo sistema que podem ser configuradas, mas não fornecem flexibilidade total ao configurar todas as opções de segurança às quais o WCF dá suporte.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. Este tópico demonstra como criar uma associação personalizada diretamente de elementos de associação individuais e realça algumas das configurações de segurança que podem ser especificadas ao criar uma ligação desse tipo.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. Para obter mais informações sobre como criar associações personalizadas, consulte estendendo associações.For more information about creating custom bindings, see Extending Bindings.

Aviso

SecurityBindingElement o não oferece suporte à IDuplexSessionChannel forma de canal, que é a forma de canal padrão usada pelo transporte TCP quando TransferMode é definido como 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. Você deve definir TransferMode para para Streamed usar neste SecurityBindingElement cenário.You must set TransferMode to Streamed in order to use SecurityBindingElement in this scenario.

Criando uma associação personalizadaCreating a Custom Binding

No WCF, todas as associações são feitas de elementos de associação.In WCF all bindings are made up of binding elements. Cada elemento de ligação deriva da BindingElement classe.Each binding element derives from the BindingElement class. Para as associações padrão fornecidas pelo sistema, os elementos de associação são criados e configurados para você, embora você possa personalizar algumas das configurações de propriedade.For the standard system-provided bindings, the binding elements are created and configured for you, although you can customize some of the property settings.

Por outro lado, para criar uma associação personalizada, os elementos de associação são criados e configurados e um CustomBinding é criado a partir dos elementos de associação.In contrast, to create a custom binding, binding elements are created and configured and a CustomBinding is created from the binding elements.

Para fazer isso, você adiciona os elementos de associação individuais a uma coleção representada por uma instância da BindingElementCollection classe e, em seguida, define a Elements propriedade de CustomBinding igual a esse objeto.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. Você deve adicionar os elementos de associação na seguinte ordem: fluxo de transações, sessão confiável, segurança, composto duplex, unidirecional, segurança de fluxo, codificação de mensagens e transporte.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. Observe que nem todos os elementos de associação listados são necessários em cada associação.Note that not all the binding elements listed are required in every binding.

SecurityBindingElementSecurityBindingElement

Três elementos de ligação estão relacionados à segurança de nível de mensagem, que derivam da SecurityBindingElement classe.Three binding elements relate to message level security, all of which derive from the SecurityBindingElement class. Os três são TransportSecurityBindingElement , SymmetricSecurityBindingElement e AsymmetricSecurityBindingElement .The three are TransportSecurityBindingElement, SymmetricSecurityBindingElement, and AsymmetricSecurityBindingElement. O TransportSecurityBindingElement é usado para fornecer segurança de modo misto.The TransportSecurityBindingElement is used to provide Mixed mode security. Os outros dois elementos são usados quando a camada de mensagem fornece segurança.The other two elements are used when the message layer provides security.

Classes adicionais são usadas quando a segurança de nível de transporte é fornecida:Additional classes are used when transport level security is provided:

Elementos de associação necessáriosRequired Binding Elements

Há um grande número de elementos de ligação possíveis que podem ser combinados em uma associação.There are a large number of possible binding elements that can be combined into a binding. Nem todas essas combinações são válidas.Not all of these combinations are valid. Esta seção descreve os elementos necessários que devem estar presentes em uma associação de segurança.This section describes the required elements that must be present in a security binding.

As associações de segurança válidas dependem de vários fatores, incluindo o seguinte:Valid security bindings depend on many factors, including the following:

  • Modo de segurança.Security mode.

  • Protocolo de transporte.Transport protocol.

  • O padrão de troca de mensagens (MEP) especificado no contrato.The message exchange pattern (MEP) specified in the contract.

A tabela a seguir mostra as configurações de pilha de elemento de associação válidas para cada combinação dos fatores anteriores.The following table shows the valid binding element stack configurations for each combination of the preceding factors. Observe que esses são os requisitos mínimos.Note that these are minimal requirements. Você pode adicionar elementos de ligação adicionais à associação, como elementos de ligação de codificação de mensagens, elementos de associação de transação e outros elementos de ligação.You can add additional binding elements to the binding, such as message encoding binding elements, transaction binding elements, and other binding elements.

Modo de segurançaSecurity Mode TransportTransport Padrão de troca de mensagens de contratoContract Message Exchange Pattern Padrão de troca de mensagens de contratoContract Message Exchange Pattern Padrão de troca de mensagens de contratoContract Message Exchange Pattern
Datagram Request Reply Duplex
TransportTransport HttpsHttps
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP
OneWayBindingElementOneWayBindingElement
SSL ou Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
MensagemMessage HttpHttp SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElement (modo de autenticação = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
CompositeDuplexBindingElementCompositeDuplexBindingElement
OneWayBindingElementOneWayBindingElement OneWayBindingElementOneWayBindingElement
HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement
TcpTcp SecurityBindingElementSecurityBindingElement SecurityBindingElementSecurityBindingElement SymmetricSecurityBindingElement (modo de autenticação = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
Misto (transporte com credenciais de mensagem)Mixed (transport with message credentials) HttpsHttps TransportSecurityBindingElementTransportSecurityBindingElement TransportSecurityBindingElementTransportSecurityBindingElement
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP TransportSecurityBindingElementTransportSecurityBindingElement SymmetricSecurityBindingElement (modo de autenticação = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation) SymmetricSecurityBindingElement (modo de autenticação = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
OneWayBindingElementOneWayBindingElement
SSL ou Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement

Observe que há muitas configurações configuráveis nos SecurityBindingElements.Note that there are many configurable settings on the SecurityBindingElements. Para obter mais informações, consulte modos de autenticação SecurityBindingElement.For more information, see SecurityBindingElement Authentication Modes.

Para obter mais informações, consulte conversas seguras e sessões seguras.For more information, see Secure Conversations and Secure Sessions.

ProcedimentosProcedures

Para criar uma associação personalizada que usa um SymmetricSecurityBindingElementTo create a custom binding that uses a SymmetricSecurityBindingElement

  1. Crie uma instância da BindingElementCollection classe com o nome outputBec .Create an instance of the BindingElementCollection class with the name outputBec.

  2. Chame o método estático M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true) , que retorna uma instância da SymmetricSecurityBindingElement classe.Call the static method M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), which returns an instance of the SymmetricSecurityBindingElement class.

  3. Adicione o SymmetricSecurityBindingElement à coleção ( outputBec ) chamando o Add método da Collection<T> BindingElement classe.Add the SymmetricSecurityBindingElement to the collection (outputBec) by calling the Add method of the Collection<T> of BindingElement class.

  4. Crie uma instância da TextMessageEncodingBindingElement classe e adicione-a à coleção ( outputBec ).Create an instance of the TextMessageEncodingBindingElement class and add it to the collection (outputBec). Isso especifica a codificação usada pela associação.This specifies the encoding used by the binding.

  5. Crie um HttpTransportBindingElement e adicione-o à coleção ( outputBec ).Create a HttpTransportBindingElement and add it to the collection (outputBec). Isso especifica que a associação usa o transporte HTTP.This specifies that the binding uses the HTTP transport.

  6. Crie uma nova associação personalizada criando uma instância da CustomBinding classe e passando a coleção outputBec para o construtor.Create a new custom binding by creating an instance of the CustomBinding class and passing the collection outputBec to the constructor.

  7. A associação personalizada resultante compartilha muitas das mesmas características que o padrão WSHttpBinding .The resulting custom binding shares many of the same characteristics as the standard WSHttpBinding. Ele especifica segurança em nível de mensagem e credenciais do Windows, mas desabilita sessões seguras, requer que a credencial de serviço seja especificada fora de banda e não criptografe assinaturas.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. O último pode ser controlado apenas definindo a MessageProtectionOrder propriedade, conforme mostrado na etapa 4.The last can be controlled only by setting the MessageProtectionOrder property as shown in step 4. Os outros dois podem ser controlados usando as configurações na associação padrão.The other two can be controlled using settings on the standard binding.

ExemploExample

DescriçãoDescription

O exemplo a seguir fornece uma função completa para criar uma associação personalizada que usa um SymmetricSecurityBindingElement .The following example provides a complete function to create a custom binding that uses a SymmetricSecurityBindingElement.

CódigoCode

// 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

Consulte tambémSee also