Nasıl yapılır: Sistem Tarafından Sağlanan Bir Bağlamayı Özelleştirme

Windows Communication Foundation (WCF), temel alınan bağlama öğelerinin bazı özelliklerini yapılandırmanıza olanak sağlayan sistem tarafından sağlanan birkaç bağlama içerir, ancak özelliklerin tümünü yapılandırmaz. Bu konuda, özel bağlama oluşturmak için bağlama öğelerinde özelliklerin nasıl ayarlanacağı gösterilmektedir.

Sistem tarafından sağlanan bağlamaları kullanmadan bağlama öğelerini doğrudan oluşturma ve yapılandırma hakkında daha fazla bilgi için bkz . Özel Bağlamalar.

Özel bağlamaları oluşturma ve genişletme hakkında daha fazla bilgi için bkz . Bağlamaları Genişletme.

WCF'de tüm bağlamalar bağlama öğelerinden oluşur. Her bağlama öğesi sınıfından BindingElement türetilir. Kendi bağlama öğelerini oluşturma ve yapılandırma gibi BasicHttpBinding sistem tarafından sağlanan bağlamalar. Bu konu, bağlamada doğrudan kullanıma sunulmayan bu bağlama öğelerinin özelliklerine nasıl erişebileceğinizi ve bunları nasıl değiştirebileceğinizi gösterir; özellikle sınıfını BasicHttpBinding seçin.

Tek tek bağlama öğeleri sınıfı tarafından BindingElementCollection temsil edilen bir koleksiyonda bulunur ve şu sırayla eklenir: İşlem Akışı, Güvenilir Oturum, Güvenlik, Bileşik Çift Yönlü, Tek yönlü, Akış Güvenliği, İleti Kodlama ve Aktarım. Listelenen tüm bağlama öğelerinin her bağlamada gerekli olmadığını unutmayın. Kullanıcı tanımlı bağlama öğeleri de bu bağlama öğesi koleksiyonunda görünebilir ve daha önce açıklandığı gibi aynı sırada görünmelidir. Örneğin, kullanıcı tanımlı aktarım bağlama öğesi koleksiyonunun son öğesi olmalıdır.

BasicHttpBinding sınıfı üç bağlama öğesi içerir:

  1. HTTP aktarımı (ileti düzeyi güvenlik) ile kullanılan sınıf veya TransportSecurityBindingElement aktarım katmanı güvenlik sağladığında kullanılan sınıfı olan isteğe bağlı bir güvenlik bağlama öğesidir AsymmetricSecurityBindingElement ve bu durumda HTTPS aktarımı kullanılır.

  2. Veya gerekli bir ileti kodlayıcı bağlama öğesi TextMessageEncodingBindingElementMtomMessageEncodingBindingElement.

  3. gerekli bir aktarım bağlama öğesi, veya HttpTransportBindingElementHttpsTransportBindingElement.

Bu örnekte bağlamanın bir örneğini oluşturacak, ondan özel bir bağlama oluşturacak, özel bağlamadaki bağlama öğelerini inceleyeceğiz ve HTTP bağlama öğesini bulduğumuzda özelliğini olarak falseayarlayacağızKeepAliveEnabled. KeepAliveEnabled özelliği doğrudan üzerinde BasicHttpBindingkullanıma sunulmaz, bu nedenle bağlama öğesine gitmek ve bu özelliği ayarlamak için özel bir bağlama oluşturmamız gerekir.

Sistem tarafından sağlanan bağlamayı değiştirmek için

  1. Sınıfının bir örneğini BasicHttpBinding oluşturun ve güvenlik modunu ileti düzeyine ayarlayın.

    //  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. Bağlamadan bir özel bağlama oluşturun ve özel bağlamanın özelliklerinden birinden bir BindingElementCollection sınıf oluşturun.

    //  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. Sınıfı döngüye alın BindingElementCollection ve sınıfı bulduğunuzda öğesinin HttpTransportBindingElement özelliğini olarak falseayarlayınKeepAliveEnabled.

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

Ayrıca bkz.