Compartir a través de


Servicio: Canales y escuchas 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.

Escuchas de canales y 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 elementos auxiliares de clase base para este proceso. (Para un diagrama de las clases auxiliares de canal discutidas en este tema, vea Información general del modelo de canales.)

La discusión siguiente está basada en el ejemplo Transporte: UDP.

Crear una escucha de canales

El UdpChannelListener que implementa el ejemplo 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 la interfaz 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.