Compartir a través de


Servicio: Canales y escucha de canales

Hay tres categorías de objetos de canal: canales, escuchas de canales y generadores de canales. Los canales son la interfaz entre la aplicación y la pila de canales. Las escuchas de canales son responsables de crear los canales en el lado de recepción (o escucha), normalmente en respuesta a un nuevo mensaje entrante o conexión. Los generadores de canales son responsables de crear los canales en el lado de envío para iniciar la comunicación con un extremo.

Escuchas de canales y canales

Las escuchas de canales son responsables de crear los canales y recibir los mensajes del nivel inferior o de la red. Los mensajes recibidos se entregan al nivel superior utilizando un canal creado por la escucha de canales.

El diagrama siguiente muestra el proceso de recibir mensajes y entregarlos al nivel superior.

Channel listeners and channels

Una escucha de canales recibiendo mensajes y entregándolos al nivel superior a través de canales.

El proceso se puede modelar conceptualmente como una cola, aunque dentro de cada canal la implementación puede no utilizar una cola. La escucha de canales es responsable de recibir los mensajes del nivel inferior o de la red y colocarlos en la cola. El canal es responsable de recibir los mensajes de la cola y entregarlos al nivel superior cuando dicho nivel pide un mensaje, por ejemplo llamando a Receive en el canal.

WCF proporciona los asistentes de clase base para este proceso. (Para un diagrama de las clases auxiliares de canal que se describen en este artículo, consulte Introducción al modelo de canales).

La siguiente explicación se basa en el ejemplo Transport: UDP.

Creación de una escucha de canales

El UdpChannelListener que el ejemplo implementa se deriva de la clase ChannelListenerBase. Utiliza un socket UDP único para recibir datagramas. El método OnOpen recibe datos utilizando el socket UDP en un bucle asincrónico. Los datos se convierten en mensajes utilizando el sistema de la codificación de mensajes:

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

Dado que el mismo canal del datagrama representa mensajes que llegan de varios orígenes, UdpChannelListener es un agente de escucha singleton. Hay, a lo sumo, un IChannel activo asociado a la vez a este agente de escucha. El ejemplo solo genera otro si se elimina subsiguientemente un canal que es devuelto por el método AcceptChannel. Cuando se recibe un mensaje, se pone en cola en este canal singleton.

UdpInputChannel

La clase UdpInputChannel implementa IInputChannel. Está compuesto de una cola de mensajes entrantes que es rellenada por el socket UdpChannelListener. Estos mensajes se quitan de la cola mediante el método Receive.