Aracılığıyla paylaş


BindingElement Oluşturma

Bağlamalar ve bağlama öğeleri (sırasıyla ve System.ServiceModel.Channels.BindingElementgenişleten System.ServiceModel.Channels.Binding nesneler), Windows Communication Foundation (WCF) uygulama modelinin kanal fabrikaları ve kanal dinleyicileriyle ilişkilendirildiği yerdir. Bağlamalar olmadan, özel kanalların kullanılması, Hizmet Kanalı Düzeyinde Programlama ve İstemci Kanalı Düzeyinde Programlama bölümünde açıklandığı gibi kanal düzeyinde programlama gerektirir. Bu konu başlığında, WCF'de kanalınızı kullanmayı etkinleştirme, kanalınız için bir BindingElement geliştirme ve Kanal Geliştirme'nin 4. adımında açıklandığı gibi uygulamadan kullanımı etkinleştirmeye yönelik en düşük gereksinim açıklanır.

Genel bakış

Kanalınız için bir BindingElement oluşturma, geliştiricilerin bunu bir WCF uygulamasında kullanmasına olanak tanır. BindingElement nesneleri, bir WCF uygulamasını kanalınızın kesin tür bilgilerine gerek kalmadan kanalınıza bağlamak için sınıfından kullanılabilir System.ServiceModel.ServiceHost .

Oluşturulduktan BindingElement sonra, Kanal Geliştirme bölümünde açıklanan diğer kanal geliştirme adımlarını izleyerek gereksinimlerinize bağlı olarak daha fazla işlevsellik etkinleştirebilirsiniz.

Bağlama Öğesi Ekleme

Özel BindingElementbir uygulamak için öğesinden BindingElementdevralan bir sınıf yazın. Örneğin, büyük iletileri öbeklere ayırabilen ve diğer uçta yeniden bir araya getirebilen bir ChunkingChannel geliştirdiyseniz, bir uygulayarak ve bağlamayı kullanmak üzere yapılandırarak bu kanalı herhangi bir BindingElement bağlamada kullanabilirsiniz. Bu konunun geri kalanı, bağlama öğesi uygulama gereksinimlerini göstermek için örnek olarak öğesini kullanır ChunkingChannel .

AChunkingBindingElement, ve ChunkingChannelListeneroluşturmakla ChunkingChannelFactory sorumludur. Bu, tür parametresinin IDuplexSessionChannel (örneğimizde tarafından desteklenen tek kanal şeklidir) ve bağlamadaki diğer bağlama öğelerinin bu kanal şeklini desteklediğini ChunkingChanneldenetler ve geçersiz kılar CanBuildChannelFactoryCanBuildChannelListener.

BuildChannelFactory önce istenen kanal şeklinin derlenip derlenebileceğini denetler ve ardından öbeklenecek ileti eylemlerinin listesini alır. Ardından yeni ChunkingChannelFactorybir oluşturur ve bunu iç kanal fabrikasından geçirir. (Aktarım bağlama öğesi oluşturuyorsanız, bu öğe bağlama yığınındaki son öğedir ve bu nedenle bir kanal dinleyicisi veya kanal fabrikası oluşturmalıdır.)

BuildChannelListener , iç kanal dinleyicisini oluşturmak ChunkingChannelListener ve geçirmek için benzer bir uygulamaya sahiptir.

Aktarım kanalı kullanan başka bir örnek olarak, Aktarım: UDP örneği aşağıdaki geçersiz kılmayı sağlar.

Örnekte bağlama öğesi öğesinden UdpTransportBindingElementTransportBindingElementtüretilir. Kanalla ilişkili fabrikaları oluşturmak için aşağıdaki yöntemleri geçersiz kılar.

public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)  
{  
    return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);  
}  
  
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)  
{  
    return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);  
}  

Ayrıca, öğesini kopyalama BindingElement ve şemamızı (soap.udp) döndürmeye yönelik üyeleri de içerir.

Protokol Bağlama Öğeleri

Yeni bağlama öğeleri, yeni aktarımlar, kodlamalar veya daha üst düzey protokoller ekleyerek dahil edilen bağlama öğelerinin herhangi birini değiştirebilir veya genişletebilir. Yeni bir Protokol Bağlama Öğesi oluşturmak için sınıfını BindingElement genişleterek başlayın. En azından, ve uygulamasını kullanarak IChannel.GetPropertyuygulamanız ChannelProtectionRequirements gerekirBindingElement.Clone. Bu, bu bağlama öğesinin değerini ChannelProtectionRequirements döndürür. Daha fazla bilgi için bkz. ChannelProtectionRequirements.

Clone bu bağlama öğesinin yeni bir kopyasını döndürmelidir. En iyi yöntem olarak, bağlama öğesi yazarlarının temel kopya oluşturucuyu çağıran bir kopya oluşturucu kullanarak uygulamasını Clone ve ardından bu sınıftaki ek alanları kopyalamasını öneririz.

Aktarım Bağlama Öğeleri

Yeni bir Aktarım Bağlama Öğesi oluşturmak için arabirimini TransportBindingElement genişletin. En azından yöntemini ve TransportBindingElement.Scheme özelliğini uygulamanız Clone gerekir.

Clone – Bu Bağlama Öğesinin yeni bir kopyasını döndürmelidir. En iyi uygulama olarak, Bağlama Öğesi yazarlarının temel kopya oluşturucuyu çağıran ve ardından bu sınıftaki ek alanları kopyalayan bir kopya oluşturucu yoluyla Clone uygulamasını öneririz.

SchemeScheme– get özelliği, bağlama öğesi tarafından temsil edilen aktarım protokolü için URI düzenini döndürür. Örneğin ve System.ServiceModel.Channels.HttpTransportBindingElementSystem.ServiceModel.Channels.TcpTransportBindingElement , ilgili Scheme özelliklerinden "http" ve "net.tcp" döndürür.

Bağlama Öğelerini Kodlama

Yeni Kodlama Bağlama Öğeleri oluşturmak için, sınıfını genişleterek BindingElement ve uygulayarak System.ServiceModel.Channels.MessageEncodingBindingElement başlayın. En azından , yöntemlerini ve MessageEncodingBindingElement.MessageVersion özelliğini uygulamanız CloneMessageEncodingBindingElement.CreateMessageEncoderFactory gerekir.

Kullanıcı tanımlı kodlama bağlama öğeleri için isteğe bağlı yöntemlerin ve özelliklerin tam listesi için bkz MessageEncodingBindingElement. .

Yeni bağlama öğesi oluşturma hakkında daha fazla bilgi için bkz . Kullanıcı Tanımlı Bağlamalar Oluşturma.

Kanalınız için bir bağlama öğesi oluşturduktan sonra bağlama öğenize yapılandırma dosyası desteği eklemek isteyip istemediğinizi, meta veri yayını desteği ekleyip ekleyemeyeceğinizi ve bağlama öğenizi kullanan kullanıcı tanımlı bir bağlama oluşturup oluşturmayabileceğinizi ve nasıl oluşturabileceğinizi görmek için Kanallar Geliştirme konusuna dönün.

Ayrıca bkz.