Share via


Como: Personalizar uma vinculação fornecida pelo sistema

O Windows Communication Foundation (WCF) inclui várias associações fornecidas pelo sistema que permitem configurar algumas das propriedades dos elementos de ligação subjacentes, mas não todas as propriedades. Este tópico demonstra como definir propriedades nos elementos de vinculação para criar uma associação personalizada.

Para obter mais informações sobre como criar e configurar diretamente elementos de vinculação sem usar as associações fornecidas pelo sistema, consulte Ligações personalizadas.

Para obter mais informações sobre como criar e estender ligações personalizadas, consulte Estendendo ligações.

No WCF, todas as ligações são compostas por elementos de ligação. Cada elemento de ligação deriva da BindingElement classe. Ligações fornecidas pelo sistema, como BasicHttpBinding criar e configurar seus próprios elementos de ligação. Este tópico mostra como acessar e alterar as propriedades desses elementos de ligação, que não são expostos diretamente na associação; especificamente, a BasicHttpBinding classe.

Os elementos de vinculação individuais estão contidos em uma coleção representada pela BindingElementCollection classe e são adicionados nesta ordem: Fluxo de Transações, Sessão Confiável, Segurança, Duplex Composto, One-way, Segurança de Fluxo, Codificação de Mensagens e Transporte. Observe que nem todos os elementos de vinculação listados são necessários em todas as associações. Os elementos de vinculação definidos pelo usuário também podem aparecer nessa coleção de elementos de vinculação e devem aparecer na mesma ordem descrita anteriormente. Por exemplo, um transporte definido pelo usuário deve ser o último elemento da coleção de elementos de ligação.

A BasicHttpBinding classe contém três elementos de ligação:

  1. Um elemento de vinculação de segurança opcional, a AsymmetricSecurityBindingElement classe usada com o transporte HTTP (segurança no nível da mensagem) ou a TransportSecurityBindingElement classe, que é usada quando a camada de transporte fornece segurança, caso em que o transporte HTTPS é usado.

  2. Um elemento de vinculação do codificador de mensagens necessário, ou TextMessageEncodingBindingElementMtomMessageEncodingBindingElement.

  3. Um elemento de ligação de transporte necessário, ou HttpTransportBindingElement, ou HttpsTransportBindingElement.

Neste exemplo, criamos uma instância da ligação, geramos uma associação personalizada a partir dela, examinamos os elementos de ligação na associação personalizada e, quando encontramos o elemento de vinculação HTTP, definimos sua KeepAliveEnabled propriedade como false . A KeepAliveEnabled propriedade não é exposta diretamente no BasicHttpBinding, portanto, devemos criar uma associação personalizada para navegar até o elemento binding e definir essa propriedade.

Para modificar uma associação fornecida pelo sistema

  1. Crie uma instância da BasicHttpBinding classe e defina seu modo de segurança para o nível da mensagem.

    //  Create an instance of the T:System.ServiceModel.BasicHttpBinding
    //  class and set its security mode to message-level security.
    BasicHttpBinding binding = new BasicHttpBinding();
    binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
    binding.Security.Mode = BasicHttpSecurityMode.Message;
    
    '  Create an instance of the T:System.ServiceModel.BasicHttpBinding 
    '  class and set its security mode to message-level security.
    Dim binding As New BasicHttpBinding()
    With binding.Security
        .Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate
        .Mode = BasicHttpSecurityMode.Message
    End With
    
  2. Crie uma associação personalizada a partir da associação e crie uma BindingElementCollection classe a partir de uma das propriedades da associação personalizada.

    //  Create a custom binding from the binding
    CustomBinding cb = new CustomBinding(binding);
    //  Get the BindingElementCollection from this custom binding
    BindingElementCollection bec = cb.Elements();
    
    '  Create a custom binding from the binding 
    Dim cb As New CustomBinding(binding)
    '  Get the BindingElementCollection from this custom binding 
    Dim bec = cb.Elements
    
  3. Faça um loop pela BindingElementCollection classe e, quando encontrar a HttpTransportBindingElement classe, defina sua KeepAliveEnabled propriedade como false.

    //  Loop through the collection, and when you find the HTTP binding element
    //  set its KeepAliveEnabled property to false
    foreach (BindingElement be in bec)
    {
        Type thisType = be.GetType();
        Console.WriteLine(thisType);
        if (be is HttpTransportBindingElement)
        {
            HttpTransportBindingElement httpElement = (HttpTransportBindingElement)be;
            Console.WriteLine("\tBefore: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled);
            httpElement.KeepAliveEnabled = false;
            Console.WriteLine("\tAfter:  HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled);
        }
    }
    
    '  Loop through the collection, and when you find the HTTP binding element
    '  set its KeepAliveEnabled property to false
    For Each be In bec
        Dim thisType = be.GetType()
        Console.WriteLine(thisType)
        If TypeOf be Is HttpTransportBindingElement Then
            Dim httpElement As HttpTransportBindingElement = CType(be, HttpTransportBindingElement)
            Console.WriteLine(Constants.vbTab & "Before: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled)
            httpElement.KeepAliveEnabled = False
            Console.WriteLine(vbTab & "After:  HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled)
        End If
    Next be
    

Consulte também