Partilhar via


Serviço: Canal ouvintes e canais

Existem três categorias de objetos de canal: canais, ouvintes de canal e fábricas de canais. Os canais são a interface entre o aplicativo e a pilha de canais. Os ouvintes de canal são responsáveis por criar canais no lado de receber (ou ouvir), geralmente em resposta a uma nova mensagem ou conexão recebida. As fábricas de canais são responsáveis por criar canais no lado do envio para iniciar a comunicação com um ponto de extremidade.

Ouvintes e canais de canais

Os ouvintes do canal são responsáveis por criar canais e receber mensagens da camada abaixo ou da rede. As mensagens recebidas são entregues na camada acima usando um canal criado pelo ouvinte do canal.

O diagrama a seguir ilustra o processo de receber mensagens e entregá-las à camada acima.

Channel listeners and channels

Um ouvinte de canal recebendo mensagens e entregando para a camada acima através de canais.

O processo pode ser conceitualmente modelado como uma fila dentro de cada canal, embora a implementação possa não usar realmente uma fila. O ouvinte do canal é responsável por receber mensagens da camada abaixo ou da rede e colocá-las na fila. O canal é responsável por receber mensagens da fila e entregá-las à camada acima quando essa camada pede uma mensagem, por exemplo, chamando Receive o canal.

O WCF fornece auxiliares de classe base para esse processo. Para obter um diagrama das classes auxiliares de canal discutidas neste artigo, consulte Visão geral do modelo de canal.

A discussão a seguir é baseada no exemplo Transport: UDP .

Criando um ouvinte de canal

O UdpChannelListener que o exemplo implementa deriva da ChannelListenerBase classe. Ele usa um único soquete UDP para receber datagramas. O OnOpen método recebe dados usando o soquete UDP em um loop assíncrono. Os dados são então convertidos em mensagens usando o sistema de codificação de mensagens:

message = UdpConstants.MessageEncoder.ReadMessage(
  new ArraySegment<byte>(buffer, 0, count),
  bufferManager
);

Como o mesmo canal de datagrama representa mensagens que chegam de várias fontes, o UdpChannelListener é um ouvinte singleton. Há no máximo um ativo IChannel associado a este ouvinte de cada vez. A amostra gera outra somente se um canal que é retornado pelo AcceptChannel método é posteriormente descartado. Quando uma mensagem é recebida, ela é enfileirada nesse canal singleton.

UdpInputChannel

A UdpInputChannel classe implementa IInputChannel. Ele consiste em uma fila de mensagens de entrada que é preenchida pelo soquete UdpChannelListenerdo . Essas mensagens são retiradas da Receive fila pelo método.