Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Existují tři kategorie objektů kanálu: kanály, naslouchací prvky kanálů a výrobci kanálů. Kanály jsou rozhraní mezi aplikací a zásobníkem kanálů. Naslouchací moduly kanálu zodpovídají za vytváření kanálů na straně příjmu (nebo na straně naslouchání), obvykle v reakci na novou příchozí zprávu nebo připojení. Kanálové továrny jsou zodpovědné za vytváření kanálů na straně odesílání k zahájení komunikace s koncovým bodem.
Naslouchací komponenty a kanály
Posluchači kanálů jsou zodpovědní za vytváření kanálů a příjem zpráv z vrstvy níž nebo ze sítě. Přijaté zprávy jsou doručovány do vyšší vrstvy pomocí kanálu vytvořeného naslouchacím procesem kanálu.
Následující diagram znázorňuje proces příjmu zpráv a jejich doručování do výše uvedené vrstvy.
Naslouchací proces pro kanály přijímá zprávy a doručuje je do vyšší vrstvy přes kanály.
Proces může být koncepčně modelován jako fronta uvnitř každého kanálu, i když implementace nemusí ve skutečnosti používat frontu. Posluchač kanálu zodpovídá za příjem zpráv z nižší vrstvy nebo ze sítě a jejich umístění do fronty. Kanál zodpovídá za získávání zpráv z fronty a jejich předání do výše uvedené vrstvy, když tato vrstva požádá o zprávu, například voláním Receive
do kanálu.
WCF poskytuje pomocné rutiny základní třídy pro tento proces. Diagram pomocných tříd kanálu probíraných v tomto článku najdete v tématu Přehled modelu kanálu.
Třída CommunicationObject implementuje ICommunicationObject a vynucuje stavový automat popsaný v kroku 2 Vývoje Kanálů.
Třída ChannelManagerBase implementuje CommunicationObject a poskytuje jednotnou základní třídu pro ChannelFactoryBase a ChannelListenerBase. Třída ChannelManagerBase funguje ve spojení s ChannelBase, což je základní třída, která implementuje IChannel.
Třída ChannelFactoryBase implementuje ChannelManagerBase a IChannelFactory konsoliduje
CreateChannel
přetížení do jednéOnCreateChannel
abstraktní metody.Třída ChannelListenerBase implementuje IChannelListener. Stará se o základní správu stavu.
Následující diskuze vychází z ukázky Transport: UDP .
Vytvoření posluchače kanálu
Vzorek UdpChannelListener
se odvozuje z ChannelListenerBase třídy. K příjmu datagramů používá jeden soket UDP. Metoda OnOpen
přijímá data pomocí soketu UDP v asynchronní smyčce. Data se pak převedou na zprávy pomocí systému kódování zpráv:
message = UdpConstants.MessageEncoder.ReadMessage(
new ArraySegment<byte>(buffer, 0, count),
bufferManager
);
Vzhledem k tomu, že stejný kanál datagramu představuje zprávy, které přicházejí z řady zdrojů, je UdpChannelListener
singletonový naslouchací proces. S tímto posluchačem je najednou přidruženo maximálně jedno aktivní IChannel. Ukázkový příklad vygeneruje další pouze tehdy, pokud je kanál vrácený metodou AcceptChannel následně zrušen. Když je zpráva přijata, je zařazena do tohoto jediného kanálu.
UdpInputChannel
Třída UdpInputChannel
implementuje IInputChannel. Skládá se z fronty příchozích zpráv, které jsou naplněny soketem UdpChannelListener
. Tyto zprávy jsou vyřazeny z fronty metodou Receive .