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:
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.
Veya gerekli bir ileti kodlayıcı bağlama öğesi TextMessageEncodingBindingElementMtomMessageEncodingBindingElement.
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 false
ayarlayacağızKeepAliveEnabled
. KeepAliveEnabled
özelliği doğrudan üzerinde BasicHttpBinding
kullanı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
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
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
Sınıfı döngüye alın BindingElementCollection ve sınıfı bulduğunuzda öğesinin HttpTransportBindingElement özelliğini olarak
false
ayarlayı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