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 ChunkingChannelListener
oluş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 ChunkingChannel
denetler 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 ChunkingChannelFactory
bir 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 UdpTransportBindingElement
TransportBindingElementtü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.
Clone. Bu bağlama öğesinin yeni bir kopyasını döndürür. 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.
CreateMessageEncoderFactory. Yeni kodlayıcınızı uygulayan ve genişletmesi MessageEncodergereken gerçek sınıf için bir tanıtıcı sağlayan bir MessageEncoderFactorydöndürür. Daha fazla bilgi için bkz. MessageEncoderFactory ve MessageEncoder.
MessageVersion. MessageVersion Kullanılan SOAP ve WS-Addressing sürümlerini temsil eden bu kodlamada kullanılan değerini döndürür.
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.