Condividi tramite


Procedura: Personalizzare un'associazione System-Provided

Windows Communication Foundation (WCF) include diverse associazioni fornite dal sistema che consentono di configurare alcune delle proprietà degli elementi di associazione sottostanti, ma non tutte le proprietà. In questo argomento viene illustrato come impostare le proprietà sugli elementi di associazione per creare un'associazione personalizzata.

Per ulteriori informazioni su come creare e configurare direttamente gli elementi di associazione senza usare le associazioni fornite dal sistema, vedere Binding Personalizzati.

Per ulteriori informazioni sulla creazione e l'estensione di associazioni personalizzate, vedere Estendere le Associazioni.

In WCF tutti i binding sono costituiti da elementi di binding. Ogni elemento di associazione deriva dalla classe BindingElement. Le associazioni fornite dal sistema, come BasicHttpBinding, creano e configurano i loro elementi di associazione. In questo argomento viene illustrato come accedere e modificare le proprietà di questi elementi di associazione, che non sono esposti direttamente nell'associazione; in particolare, la classe BasicHttpBinding.

I singoli elementi di associazione sono contenuti in una raccolta rappresentata dalla classe BindingElementCollection e vengono aggiunti in questo ordine: Flusso delle transazioni, Reliable Session, Sicurezza, Duplex composito, Unidirezionale, Sicurezza flusso, Codifica messaggi e Trasporto. Si noti che non tutti gli elementi di associazione elencati sono necessari in ogni associazione. Gli elementi di associazione definiti dall'utente possono essere visualizzati anche in questa raccolta di elementi di associazione e devono essere visualizzati nello stesso ordine descritto in precedenza. Ad esempio, un trasporto definito dall'utente deve essere l'ultimo elemento della raccolta di elementi di associazione.

La classe BasicHttpBinding contiene tre elementi di associazione:

  1. Elemento facoltativo di associazione di sicurezza, la classe AsymmetricSecurityBindingElement usata con il trasporto HTTP (sicurezza a livello di messaggio) o la classe TransportSecurityBindingElement, che viene usata quando il livello di trasporto fornisce sicurezza, nel qual caso viene usato il trasporto HTTPS.

  2. Elemento di associazione del codificatore di messaggi obbligatorio, TextMessageEncodingBindingElement o MtomMessageEncodingBindingElement.

  3. Elemento di associazione del trasporto obbligatorio, HttpTransportBindingElemento HttpsTransportBindingElement.

In questo esempio viene creata un'istanza dell'associazione, viene generata un'associazione personalizzata da essa, vengono esaminati gli elementi di associazione nell'associazione personalizzata e, quando si trova l'elemento di associazione HTTP, viene impostata la relativa proprietà KeepAliveEnabled su false. La proprietà KeepAliveEnabled non è esposta direttamente nella BasicHttpBinding, pertanto è necessario creare un'associazione personalizzata per passare all'elemento di associazione e impostare questa proprietà.

Per modificare un binding fornito dal sistema

  1. Creare un'istanza della classe BasicHttpBinding e impostarne la modalità di sicurezza a livello di messaggio.

    //  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. Creare un'associazione personalizzata dall'associazione e creare una classe BindingElementCollection da una delle proprietà dell'associazione personalizzata.

    //  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. Scorrere la classe BindingElementCollection e, quando si trova la classe HttpTransportBindingElement, impostare la relativa proprietà KeepAliveEnabled su 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 = {httpElement.KeepAliveEnabled}");
            httpElement.KeepAliveEnabled = false;
            Console.WriteLine($"\tAfter:  HttpTransportBindingElement.KeepAliveEnabled = {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
    

Vedere anche