Tworzenie elementu BindingElement
Powiązania i elementy powiązania (obiekty, które rozszerzają System.ServiceModel.Channels.Binding i System.ServiceModel.Channels.BindingElement, są odpowiednio miejscem, w którym model aplikacji Windows Communication Foundation (WCF) jest skojarzony z fabrykami kanałów i odbiornikami kanałów. Bez powiązań użycie kanałów niestandardowych wymaga programowania na poziomie kanału zgodnie z opisem w temacie Programowanie na poziomie kanału usług i Programowanie na poziomie kanału klienta. W tym temacie omówiono minimalne wymaganie dotyczące włączania korzystania z kanału w programie WCF, opracowywania BindingElement kanału i włączania użycia z aplikacji zgodnie z opisem w kroku 4 kanałów programowania.
Omówienie
BindingElement Tworzenie elementu dla kanału umożliwia deweloperom korzystanie z niego w aplikacji WCF. BindingElement obiekty mogą służyć z System.ServiceModel.ServiceHost klasy do łączenia aplikacji WCF z kanałem bez konieczności dokładnego typu informacji o kanale.
Po utworzeniu elementu BindingElement można włączyć więcej funkcji w zależności od wymagań, wykonując pozostałe kroki tworzenia kanału opisane w temacie Tworzenie kanałów.
Dodawanie elementu powiązania
Aby zaimplementować niestandardową BindingElementklasę , napisz klasę dziedziczą z BindingElementklasy . Jeśli na przykład utworzono element ChunkingChannel
, który może podzielić duże komunikaty na fragmenty i ponownie utworzyć je na drugim końcu, możesz użyć tego kanału w dowolnym powiązaniu, implementując BindingElement i konfigurując powiązanie, aby go używać. W pozostałej części tego tematu użyto ChunkingChannel
elementu jako przykładu, aby zademonstrować wymagania implementacji elementu powiązania.
Element A ChunkingBindingElement
jest odpowiedzialny za tworzenie elementów ChunkingChannelFactory
i ChunkingChannelListener
. Zastępuje on implementacje CanBuildChannelFactory i CanBuildChannelListener sprawdza, czy parametr typu to IDuplexSessionChannel (w naszym przykładzie jest to jedyny kształt kanału ChunkingChannel
obsługiwany przez element ) i czy inne elementy powiązania w powiązaniu obsługują ten kształt kanału.
BuildChannelFactory najpierw sprawdza, czy żądany kształt kanału można skompilować, a następnie pobiera listę akcji komunikatów do fragmentowania. Następnie tworzy nowy ChunkingChannelFactory
element , przekazując go do fabryki kanałów wewnętrznych. (Jeśli tworzysz element powiązania transportu, ten element jest ostatnim w stosie powiązań i dlatego musi utworzyć odbiornik kanału lub fabrykę kanałów).
BuildChannelListener ma podobną implementację do tworzenia ChunkingChannelListener
i przekazywania go odbiornika kanału wewnętrznego.
W innym przykładzie przy użyciu kanału transportu przykład Transport: UDP zawiera następujące przesłonięcia.
W przykładzie element powiązania to UdpTransportBindingElement
, który pochodzi z elementu TransportBindingElement. Zastępuje następujące metody tworzenia fabryk skojarzonych z kanałem.
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);
}
Zawiera również elementy członkowskie do klonowania i zwracania naszego schematu BindingElement
(soap.udp).
Elementy powiązania protokołu
Nowe elementy powiązania mogą zastępować lub rozszerzać dowolne dołączone elementy powiązania, dodając nowe transporty, kodowanie lub protokoły wyższego poziomu. Aby utworzyć nowy element powiązania protokołu, zacznij od rozszerzenia BindingElement klasy . Następnie należy zaimplementować element BindingElement.Clone i zaimplementować metodę ChannelProtectionRequirements
przy użyciu polecenia IChannel.GetProperty. Spowoduje to zwrócenie ChannelProtectionRequirements wartości dla tego elementu powiązania. Aby uzyskać więcej informacji, zobacz ChannelProtectionRequirements.
Clone powinna zwrócić nową kopię tego elementu powiązania. Najlepszym rozwiązaniem jest zaimplementowanie Clone przez autorów elementów powiązania przy użyciu konstruktora kopii, który wywołuje konstruktor kopii podstawowej, a następnie klonuje wszystkie dodatkowe pola w tej klasie.
Elementy powiązania transportu
Aby utworzyć nowy element powiązania transportu, rozszerz TransportBindingElement interfejs. Następnie należy zaimplementować metodę Clone i TransportBindingElement.Scheme właściwość .
Clone — Powinna zwrócić nową kopię tego elementu powiązania. Najlepszym rozwiązaniem jest zaimplementowanie klonowania przez autorów elementów powiązania za pomocą konstruktora kopiowania, który wywołuje konstruktor kopii podstawowej, a następnie klonuje wszystkie dodatkowe pola w tej klasie.
SchemeScheme— Właściwość get zwraca schemat identyfikatora URI dla protokołu transportowego reprezentowanego przez element powiązania. Na przykład System.ServiceModel.Channels.HttpTransportBindingElement wartości i System.ServiceModel.Channels.TcpTransportBindingElement zwracają wartości "http" i "net.tcp" z odpowiednich Scheme właściwości.
Elementy powiązania kodowania
Aby utworzyć nowe elementy powiązania kodowania, zacznij od rozszerzenia klasy i zaimplementowania BindingElementSystem.ServiceModel.Channels.MessageEncodingBindingElement klasy. Następnie należy zaimplementować Clonemetody i MessageEncodingBindingElement.MessageVersion właściwość . MessageEncodingBindingElement.CreateMessageEncoderFactory
Clone. Zwraca nową kopię tego elementu powiązania. Najlepszym rozwiązaniem jest zaimplementowanie Clone przez autorów elementów powiązania przy użyciu konstruktora kopii, który wywołuje konstruktor kopii podstawowej, a następnie klonuje wszystkie dodatkowe pola w tej klasie.
CreateMessageEncoderFactory. Zwraca element MessageEncoderFactory, który udostępnia dojście do rzeczywistej klasy, która implementuje nowy koder i który powinien rozszerzać MessageEncoderelement . Aby uzyskać więcej informacji, zobacz tematy MessageEncoderFactory oraz MessageEncoder.
MessageVersion. Zwraca wartość użytą MessageVersion w tym kodowaniu, która reprezentuje używane wersje protokołu SOAP i adresowania WS.
Aby uzyskać pełną listę opcjonalnych metod i właściwości elementów powiązania kodowania zdefiniowanego przez użytkownika, zobacz MessageEncodingBindingElement.
Aby uzyskać więcej informacji na temat tworzenia nowego elementu powiązania, zobacz Tworzenie powiązań zdefiniowanych przez użytkownika.
Po utworzeniu elementu powiązania dla kanału wróć do tematu Tworzenie kanałów , aby zobaczyć, czy chcesz dodać obsługę pliku konfiguracji do elementu powiązania, jeśli i jak dodać obsługę publikacji metadanych oraz czy i jak utworzyć powiązanie zdefiniowane przez użytkownika, które używa elementu powiązania powiązania.