Sdílet prostřednictvím


Služba: Naslouchací procesy kanálů a kanály

Existují tři kategorie objektů kanálu: kanály, naslouchací procesy kanálů a továrny kanálů. Kanály jsou rozhraní mezi aplikací a zásobníkem kanálů. Naslouchací procesy kanálu zodpovídají za vytváření kanálů na straně příjmu (nebo naslouchání), obvykle v reakci na novou příchozí zprávu nebo připojení. Objekty pro vytváření kanálů na straně odesílání zodpovídají za zahájení komunikace s koncovým bodem.

Naslouchací procesy a kanály kanálu

Naslouchací procesy kanálu zodpovídají za vytváření kanálů a příjem zpráv z níže uvedené vrstvy nebo ze sítě. Přijaté zprávy se doručují do výše uvedené 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.

Channel listeners and channels

Naslouchací proces kanálu přijímá zprávy a doručuje do vrstvy nad 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. Naslouchací proces kanálu zodpovídá za příjem zpráv z vrstvy pod 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í naslouchacího procesu kanálu

Ukázka UdpChannelListener implementuje odvození 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ů, jedná se UdpChannelListener o jeden naslouchací proces. K tomuto naslouchacímu procesu je současně přidruženo maximálně jedno aktivní IChannel . Ukázka vygeneruje další pouze v případě, že se následně odstraní kanál vrácený metodou AcceptChannel . Když se zpráva přijme, začtou se do tohoto jednoúčelového kanálu.

UdpInputChannel

Třída UdpInputChannel implementuje IInputChannel. Skládá se z fronty příchozích zpráv naplněných soketem UdpChannelListener. Tyto zprávy jsou vyřazeny z fronty metodou Receive .