Sdílet prostřednictvím


Služba: Posluchači kanálů a kanály

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.

Kanály a posluchači

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.

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 .