Aracılığıyla paylaş


Kullanıcı Tanımlı Bağlamalar Oluşturma

Sistem tarafından sağlanmayan bağlamalar oluşturmanın birkaç yolu vardır:

  • Bağlama öğeleriyle doldurduğunuz bir kapsayıcı olan sınıfını temel alan CustomBinding özel bir bağlama oluşturun. Özel bağlama daha sonra bir hizmet uç noktasına eklenir. Özel bağlamayı program aracılığıyla veya bir uygulama yapılandırma dosyasında oluşturabilirsiniz. Bir uygulama yapılandırma dosyasından bağlama öğesi kullanmak için bağlama öğesinin kapsamını genişletmesi BindingElementExtensionElementgerekir. Özel bağlamalar hakkında daha fazla bilgi için bkz . Özel Bağlamalar ve CustomBinding.

  • Standart bağlamadan türetilen bir sınıf oluşturabilirsiniz. Örneğin, bağlama öğelerini almak ve özel bağlama öğesi eklemek veya güvenlik için belirli bir değer oluşturmak için öğesinden ve geçersiz kılma CreateBindingElements yönteminden WSHttpBinding bir sınıf türetebilirsiniz.

  • Bağlama uygulamasının tamamını tamamen denetlemek için yeni Binding bir tür oluşturabilirsiniz.

Bağlama Öğelerinin Sırası

Her bağlama öğesi, ileti gönderirken veya alırken bir işleme adımlarını temsil eder. Çalışma zamanında, bağlama öğeleri giden ve gelen kanal yığınları oluşturmak için gerekli kanalları ve dinleyicileri oluşturur.

Bağlama öğelerinin üç ana türü vardır: Protokol Bağlama Öğeleri, Kodlama Bağlama Öğeleri ve Aktarım Bağlama Öğeleri.

Protokol Bağlama Öğeleri – Bu öğeler, iletilerde hareket eden daha üst düzey işleme adımlarını temsil eder. Bu bağlama öğeleri tarafından oluşturulan kanallar ve dinleyiciler ileti içeriğini ekleyebilir, kaldırabilir veya değiştirebilir. Belirli bir bağlama, her biri öğesinden BindingElementdevralan rastgele sayıda protokol bağlama öğesine sahip olabilir. Windows Communication Foundation (WCF), ve SymmetricSecurityBindingElementdahil olmak üzere ReliableSessionBindingElement çeşitli protokol bağlama öğeleri içerir.

Kodlama Bağlama Öğesi – Bu öğeler, ileti ile iletim için hazır bir kodlama arasındaki dönüştürmeleri temsil eder. Tipik WCF bağlamaları tam olarak bir kodlama bağlama öğesi içerir. Kodlama bağlama öğelerine örnek olarak MtomMessageEncodingBindingElement, BinaryMessageEncodingBindingElementve TextMessageEncodingBindingElementverilebilir. Bağlama için kodlama bağlama öğesi belirtilmezse, varsayılan kodlama kullanılır. Varsayılan değer, aktarım HTTP olduğunda metindir ve aksi takdirde ikilidir.

Aktarım Bağlama Öğesi – Bu öğeler bir aktarım protokolünde kodlama iletisinin iletimini temsil ediyor. Tipik WCF bağlamaları, öğesinden TransportBindingElementdevralan tam olarak bir aktarım bağlama öğesi içerir. Aktarım bağlama öğelerine örnek olarak TcpTransportBindingElement, , HttpTransportBindingElementve NamedPipeTransportBindingElementverilebilir.

Yeni bağlamalar oluştururken, eklenen bağlama öğelerinin sırası önemlidir. Bağlama öğelerini her zaman aşağıdaki sırayla ekleyin:

Katman Seçenekler Zorunlu
İşlem Akışı System.ServiceModel.Channels.TransactionFlowBindingElement Hayır
Güvenilirlik System.ServiceModel.Channels.ReliableSessionBindingElement Hayır
Güvenlik System.ServiceModel.Channels.SecurityBindingElement Hayır
Bileşik Çift Yönlü System.ServiceModel.Channels.CompositeDuplexBindingElement Hayır
Kodlama Metin, İkili, MTOM, Özel Evet*
Taşıma TCP, Adlandırılmış Kanallar, HTTP, HTTPS, MSMQ, Özel Yes

*Her bağlama için bir kodlama gerektiğinden, bir kodlama belirtilmezse WCF sizin için varsayılan bir kodlama ekler. Varsayılan değer HTTP ve HTTPS aktarımları için Text/XML, aksi takdirde İkili'dir.

Yeni Bağlama Öğesi Oluşturma

WCF tarafından sağlanan türlere BindingElement ek olarak, kendi bağlama öğelerinizi oluşturabilirsiniz. Bu, bağlama yığınının oluşturulma şeklini ve yığında sistem tarafından sağlanan diğer türlerle oluşturulabilecek kendi BindingElement bileşenlerinizi oluşturarak bunu özelleştirmenizi sağlar.

Örneğin, iletiyi bir veritabanına günlüğe kaydetme olanağı sağlayan bir LoggingBindingElement uygularsanız, bunu kanal yığınındaki bir aktarım kanalının üzerine yerleştirmeniz gerekir. Bu durumda, uygulama aşağıdaki örnekte olduğu gibi ile oluşturan TcpTransportBindingElementözel bir bağlama LoggingBindingElement oluşturur.

Binding customBinding = new CustomBinding(  
  new LoggingBindingElement(),
  new TcpTransportBindingElement()  
);  

Yeni bağlama öğenizi nasıl yazabileceğiniz, tam işlevselliğine bağlıdır. Örneklerden biri olan Aktarım: UDP, bir tür bağlama öğesinin nasıl uygulanacaklarına ilişkin ayrıntılı bir açıklama sağlar.

Yeni Bağlama Oluşturma

Kullanıcı tarafından oluşturulan bağlama öğesi iki şekilde kullanılabilir. Önceki bölümde ilk yol gösterilmektedir: özel bağlama aracılığıyla. Özel bağlama, kullanıcının kullanıcı tarafından oluşturulanlar da dahil olmak üzere rastgele bir bağlama öğeleri kümesine göre kendi bağlamasını oluşturmasına olanak tanır.

Bağlamayı birden fazla uygulamada kullanıyorsanız, kendi bağlamanızı oluşturun ve genişletin Binding. Bu, her kullanmak istediğinizde el ile özel bağlama oluşturulmasını önler. Kullanıcı tanımlı bağlama, bağlamanın davranışını tanımlamanıza ve kullanıcı tanımlı bağlama öğelerini eklemenize olanak tanır. Ve önceden paketlenmiş: bağlamayı her kullandığınızda yeniden oluşturmanız gerekmez.

Kullanıcı tanımlı bağlama en azından yöntemini ve Scheme özelliğini uygulamalıdırCreateBindingElements.

yöntemi, CreateBindingElements bağlama için bağlama öğelerini içeren yeni BindingElementCollection bir döndürür. Koleksiyon sıralanır ve önce protokol bağlama öğelerini, ardından kodlama bağlama öğesini ve ardından aktarım bağlama öğesini içermelidir. WCF sistem tarafından sağlanan bağlama öğelerini kullanırken, Özel Bağlamalar'da belirtilen bağlama öğesi sıralama kurallarını izlemeniz gerekir. Bu koleksiyon hiçbir zaman kullanıcı tanımlı bağlama sınıfı içinde başvuruda bulunan nesnelere başvurmamalıdır; sonuç olarak, bağlama yazarlarının her çağrısında bir BindingElementCollection değerini döndürmesi Clone()CreateBindingElementsgerekir.

özelliği, Scheme bağlamada kullanılan aktarım protokolü için URI düzenini temsil eder. Örneğin, WSHttpBinding ve NetTcpBinding ilgili Scheme özelliklerinden "http" ve "net.tcp" döndürür.

Kullanıcı tanımlı bağlamalar için isteğe bağlı yöntemlerin ve özelliklerin tam listesi için bkz Binding. .

Örnek

Bu örnek, 'de SampleProfileUdpBinding' den Bindingtüretilen profil bağlaması uygular. içinde SampleProfileUdpBinding en fazla dört bağlama öğesi içerir: bir kullanıcı tarafından oluşturulan UdpTransportBindingElement; ve üç sistem tarafından sağlanan: TextMessageEncodingBindingElement, CompositeDuplexBindingElementve ReliableSessionBindingElement.

public override BindingElementCollection CreateBindingElements()  
{
    BindingElementCollection bindingElements = new BindingElementCollection();  
    if (ReliableSessionEnabled)  
    {  
        bindingElements.Add(session);  
        bindingElements.Add(compositeDuplex);  
    }  
    bindingElements.Add(encoding);  
    bindingElements.Add(transport);  
    return bindingElements.Clone();  
}  

Çift Yönlü Sözleşmelerle Güvenlik Kısıtlamaları

Tüm bağlama öğeleri birbiriyle uyumlu değildir. Özellikle, çift yönlü anlaşmalarla kullanıldığında güvenlik bağlama öğelerinde bazı kısıtlamalar vardır.

Tek Seferlik Güvenlik

İleti> yapılandırma öğesinin falseözniteliğini <olarak ayarlayarak negotiateServiceCredential gerekli tüm güvenlik kimlik bilgilerinin tek bir iletide gönderildiği "tek seferlik" güvenlik uygulayabilirsiniz.

Tek seferlik kimlik doğrulaması çift yönlü anlaşmalarla çalışmaz.

İstek-Yanıt sözleşmeleri için tek seferlik kimlik doğrulaması yalnızca güvenlik bağlama öğesinin altındaki bağlama yığını oluşturma veya IRequestSessionChannel örneklerin oluşturulmasını IRequestChannel destekliyorsa çalışır.

Tek yönlü anlaşmalar için, güvenlik bağlama öğesinin altındaki bağlama yığını , IRequestSessionChannelIOutputChannel veya IOutputSessionChannel örnekleri oluşturmayı IRequestChanneldestekliyorsa tek seferlik kimlik doğrulaması çalışır.

Tanımlama bilgisi modu güvenlik bağlamı belirteçleri çift yönlü anlaşmalarla kullanılamaz.

İstek-Yanıt sözleşmeleri için tanımlama bilgisi modu güvenlik bağlamı belirteçleri yalnızca güvenlik bağlama öğesinin altındaki bağlama yığını oluşturma IRequestChannel veya IRequestSessionChannel örnekleri desteklemesi durumunda çalışır.

Tek yönlü anlaşmalarda, güvenlik bağlama öğesinin altındaki bağlama yığını veya IRequestSessionChannel örnekleri oluşturmayı IRequestChannel destekliyorsa tanımlama bilgisi modu güvenlik bağlam belirteçleri çalışır.

Oturum modu Güvenlik Bağlamı Belirteçleri

Güvenlik bağlama öğesinin altındaki bağlama yığını veya IDuplexSessionChannel örnekleri oluşturmayı IDuplexChannel destekliyorsa oturum modu SCT çift yönlü anlaşmalar için çalışır.

Güvenlik bağlama öğesinin altındaki bağlama yığını , IDuplexSessionChannelIRequestChannel veya IRequestSessionChannelörnekleri oluşturmayı IDuplexChanneldestekliyorsa, oturum modu SCT İstek-Yanıt sözleşmeleri için çalışır.

Güvenlik bağlama öğesinin altındaki bağlama yığını , IDuplexSessionChannelveya IRequestSessionChannel örnekleri oluşturmayı IDuplexChanneldestekliyorsa oturum modu SCT'leri IRequestChannel 1 yönlü sözleşmeler için çalışır.

Standart Bağlamadan Türetme

Tamamen yeni bir bağlama sınıfı oluşturmak yerine, sistem tarafından sağlanan mevcut bağlamalardan birini genişletmeniz mümkün olabilir. Önceki örnekte olduğu gibi yöntemini ve Scheme özelliğini geçersiz kılmanız CreateBindingElements gerekir.

Ayrıca bkz.