Aracılığıyla paylaş


System-Provided Bağlamasını Özelleştirme: Nasıl Yapılır

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. Sistem tarafından sağlanan bağlamalar, kendi bağlama öğelerini oluşturur ve yapılandırır. Bu konu, bağlama doğrudan kullanıma sunulmayan bu bağlama öğelerinin özelliklerine erişim sağlamayı ve bunları değiştirmeyi nasıl yapabileceğinizi gösterir; özellikle BasicHttpBinding sınıfı.

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ıyla (ileti düzeyi güvenlik) kullanılan AsymmetricSecurityBindingElement sınıfı veya aktarım katmanı güvenlik sağladığında kullanılan TransportSecurityBindingElement sınıfı olmak üzere, isteğe bağlı bir güvenlik bağlama öğesidir; bu durumda HTTPS aktarımı kullanılır.

  2. Gerekli bir ileti kodlayıcı bağlama öğesi, ya TextMessageEncodingBindingElement ya da MtomMessageEncodingBindingElement.

  3. gerekli bir aktarım bağlama öğesi, ya HttpTransportBindingElement ya da HttpsTransportBindingElement.

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. ``` BindingElementCollection sınıfında döngü oluşturun ve HttpTransportBindingElement sınıfını bulduğunuzda, KeepAliveEnabled özelliğini false olarak ayarlayın. ```

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

Ayrıca bkz.