Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bağlamalar ve bağlama öğeleri (System.ServiceModel.Channels.Binding ve System.ServiceModel.Channels.BindingElement sırasıyla genişleten 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 Channel-Level Programlama ve İstemci Channel-Level 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 sınıfından nesneler, bir WCF uygulamasını, kanalınızın kesin tür bilgisine sahip olmadan kanalınıza bağlamak için 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 bir BindingElement uygulamak için BindingElement sınıfından devralan bir sınıf yazın. Örneğin, büyük iletileri parçalara ayırabilen ve diğer uçta yeniden bir araya getirebilen bir ChunkingChannel geliştirdiyseniz, bu kanalı bir BindingElement uygulayarak ve bağlamayı bu kanalı kullanacak şekilde yapılandırarak herhangi bir bağlamada kullanabilirsiniz. Bu konunun geri kalanı, bir bağlama öğesinin uygulanması için gerekli şartları göstermek amacıyla örnek olarak ChunkingChannel kullanır.
A ChunkingBindingElement, ChunkingChannelFactory ve ChunkingChannelListener oluşturmaktan sorumludur. Bu, CanBuildChannelFactory ve CanBuildChannelListener uygulamalarını geçersiz kılar ve tür parametresinin IDuplexSessionChannel olduğunu denetler (örneğimizde ChunkingChannel tarafından desteklenen tek kanal şekli budur) ve bağlamadaki diğer bağlama öğelerinin bu kanal şeklini desteklediğinden emin olur.
BuildChannelFactory önce istenen kanal şeklinin inşa edilip edilemeyeceğini denetler ve ardından parçalara ayrılacak mesaj 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, ChunkingChannelListener oluşturmak ve iç kanal dinleyicisini geçirmek için benzer bir uygulamaya sahiptir.
Başka bir örnek olarak, aktarım kanalı kullanan Aktarım: UDP örneği, aşağıdaki geçersiz kılmayı sağlar.
Örnekte UdpTransportBindingElement'den türeyen bağlama öğesi TransportBindingElement'dir. 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, BindingElement öğesini klonlamak ve şemamızı (soap.udp) döndürmek için ü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, önce BindingElement.Clone'yi uygulamalısınız ve ardından ChannelProtectionRequirements kullanarak IChannel.GetProperty'i hayata geçirmelisiniz. 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 uygulama olarak, bağlama öğesi yazarlarının temel kopya oluşturucuyu çağıran bir kopya oluşturucu kullanarak Clone uygulamasını ve dolayısıyla bu sınıftaki ek alanları klonlaması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 Clone yöntemini ve TransportBindingElement.Scheme özelliğini uygulamanız 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.
Scheme Scheme– get özelliği, bağlama öğesi tarafından temsil edilen aktarım protokolü için URI düzenini döndürür. Örneğin, System.ServiceModel.Channels.HttpTransportBindingElement ve System.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, BindingElement sınıfını genişleterek ve System.ServiceModel.Channels.MessageEncodingBindingElement sınıfını uygulayarak başlayın. En azından Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory yöntemlerini ve MessageEncodingBindingElement.MessageVersion özelliğini uygulamanız gerekir.
Clone. Bu bağlama öğesinin yeni bir kopyasını döndürür. En iyi uygulama olarak, bağlama öğesi yazarlarının temel kopya oluşturucuyu çağıran bir kopya oluşturucu kullanarak Clone uygulamasını ve dolayısıyla bu sınıftaki ek alanları klonlamasını öneririz.
CreateMessageEncoderFactory. Yeni kodlayıcınızı uygulayan ve MessageEncoderFactory ile genişletilmesi gereken gerçek sınıfa bir tanıtıcı sağlayan bir MessageEncoder döndürür. Daha fazla bilgi için bkz. MessageEncoderFactory ve MessageEncoder.
MessageVersion. MessageVersion 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 . User-Defined 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.