Aracılığıyla paylaş


User-Defined Bağlamaları Oluşturma

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

  • CustomBinding sınıfını temel alan ve bağlama öğeleriyle doldurduğunuz bir kapsayıcı olan bireysel 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, WSHttpBinding öğesinden bir sınıf türetebilir ve bağlama öğelerini almak, özel bir bağlama öğesi eklemek veya güvenlik için belirli bir değer belirlemek amacıyla CreateBindingElements yöntemini geçersiz kılabilirsiniz.

  • 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 BindingElement öğesinden devralan keyfi sayıda protokol bağlama öğesine sahip olabilir. Windows Communication Foundation (WCF), ReliableSessionBindingElement ve SymmetricSecurityBindingElement dahil olmak üzere çeşitli protokol bağlama öğeleri içerir.

Kodlama Bağlama Öğesi – Bu öğeler, bir mesaj 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ı, TransportBindingElement öğesinden devralan yalnızca 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 Gerekli
İşlem Akışı System.ServiceModel.Channels.TransactionFlowBindingElement Hayı
Güvenilirlik System.ServiceModel.Channels.ReliableSessionBindingElement Hayı
Güvenlik System.ServiceModel.Channels.SecurityBindingElement Hayı
Bileşik Çift Yönlü System.ServiceModel.Channels.CompositeDuplexBindingElement Hayı
Kodlama Metin, İkili, MTOM, Özel Evet*
Taşıma TCP, Adlandırılmış Kanallar, HTTP, HTTPS, MSMQ, Özel Evet

*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, mesajı bir veritabanına kaydetme olanağı sağlayan bir LoggingBindingElement uygularsanız, bunu kanal yığınında bir aktarım kanalının üzerine yerleştirmeniz gerekir. Bu durumda, uygulama aşağıdaki örnekte olduğu gibi, LoggingBindingElement ve TcpTransportBindingElement ile bir arada özel bir bağlama 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 yöntem özel bir bağlama aracılığıyla gösterilmektedir. Ö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ı bir bağlama, en azından CreateBindingElements yöntemini ve Scheme özelliğini uygulamalıdır.

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çindeki nesnelere atıfta bulunmamalıdır; dolayısıyla, bağlama yazarlarının her çağrısında Clone(), BindingElementCollection'deki bir CreateBindingElements değerini döndürmesi gerekir.

ö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.

One-Shot Güvenliği

İletinegotiateServiceCredential yapılandırma öğesinin <özniteliğini >olarak ayarlayarak false 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.

Request-Reply sözleşmeleri için tek seferlik kimlik doğrulama, yalnızca güvenlik bağlama öğesinin altındaki bağlama yığınının IRequestChannel veya IRequestSessionChannel örneklerinin oluşturulmasını desteklemesi durumunda çalışır.

Tek yönlü sözleşmeler için, güvenlik bağlama öğesinin altındaki bağlama yığını IRequestChannel, IRequestSessionChannel, IOutputChannel veya IOutputSessionChannel örnekleri oluşturmayı destekliyorsa, tek seferlik kimlik doğrulaması çalışır.

Çerez modu güvenlik bağlamı token'ları çift yönlü sözleşmelerle kullanılamaz.

Request-Reply sözleşmeleri için çerez modu güvenlik bağlam belirteçleri, yalnızca güvenlik bağlama öğesinin altındaki bağlama yığını IRequestChannel veya IRequestSessionChannel örneklerini oluşturmayı destekliyorsa çalışır.

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

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

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

Güvenlik bağlama öğesinin altındaki bağlama yığını , IDuplexChannel, IDuplexSessionChannel veya IRequestChannelörneklerini oluşturmayı IRequestSessionChanneldestekliyorsa oturum modu SCT Request-Reply sözleşmeler için çalışır.

Güvenlik bağlama öğesinin altındaki bağlama yığını, IDuplexChannel, IDuplexSessionChannel, IRequestChannel veya IRequestSessionChannel örneklerini oluşturmayı destekliyorsa, oturum modu SCT 1 yönlü sözleşmeler için çalışır.

Standart Bağlayıcıdan 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 durumdaki gibi, CreateBindingElements yöntemini ve Scheme özelliğini geçersiz kılmanız gerekir.

Ayrıca bakınız