Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
La pila de canales de Windows Communication Foundation (WCF) es una pila de comunicación superpuesta con uno o varios canales que procesan mensajes. En la parte inferior de la pila es un canal de transporte responsable de adaptar la pila de canales al transporte subyacente (por ejemplo, TCP, HTTP, SMTP y otros tipos de transporte). Los canales proporcionan un modelo de programación de bajo nivel para enviar y recibir mensajes. Este modelo de programación se basa en varias interfaces y otros tipos conocidos colectivamente como modelo de canal WCF. En este tema se tratan diversas formas de canal, la construcción de un agente de escucha básico del canal (en el servicio) y el generador de canales (en el cliente).
Pila de canales
Los puntos de conexión de WCF se comunican con el mundo mediante una pila de comunicación denominada pila de canales. En el diagrama siguiente se compara la pila de canales con otras pilas de comunicación, por ejemplo TCP/IP.
En primer lugar, las similitudes: en ambos casos, cada capa de la pila proporciona una abstracción del mundo debajo de esa capa y expone esa abstracción solo a la capa directamente encima de ella. Cada capa utiliza la abstracción únicamente de la capa directamente inferior. Además, en ambos casos, cuando dos pilas se comunican, cada capa se comunica con la capa correspondiente de la otra pila, por ejemplo, la capa IP se comunica con la capa IP y la capa TCP con la capa TCP, etc.
Ahora, las diferencias: Aunque la pila TCP se diseñó para proporcionar una abstracción de la red física, la pila de canales está diseñada para proporcionar una abstracción no solo de cómo se entrega el mensaje, es decir, el transporte, sino también otras características como lo que se encuentra en el mensaje o qué protocolo se usa para la comunicación, incluyendo el transporte pero mucho más que eso. Por ejemplo, el elemento de enlace de la sesión confiable es parte de la pila del canal pero no está debajo del transporte o el propio transporte. Esta abstracción se logra al requerir que el canal más bajo de la pila adapte el protocolo de transporte subyacente a la arquitectura de la pila de canales y luego dependa de los canales más arriba en la pila para proporcionar características de comunicación como fiabilidad y seguridad.
Los mensajes fluyen a través de la pila de la comunicación como objetos Message. Como se muestra en la ilustración anterior, el canal inferior se denomina canal de transporte. Es el canal responsable de enviar y recibir mensajes hacia y desde otras partes. Esto incluye la responsabilidad de transformar el Message objeto hacia y desde el formato utilizado para comunicarse con otras partes. Encima del canal de transporte puede haber cualquier número de canales de protocolo cada uno responsable de proporcionar una función de comunicación, como garantías de entrega confiables. Los canales de protocolo funcionan mediante mensajes que fluyen a través de ellos en la forma del objeto Message. Normalmente transforman el mensaje, por ejemplo, agregando encabezados o cifrando el cuerpo, o envían y reciben sus propios mensajes de control de protocolo, por ejemplo, confirmaciones de recibo.
Formas de canal
Cada canal implementa una o más interfaces conocidas como "interfaces de forma de canal" o "formas de canal". Esas formas de canal proporcionan los métodos orientados a la comunicación, como enviar y recibir, o solicitar y responder, que implementa el canal y que utiliza el usuario del canal. En la base de las formas del canal se encuentra la interfaz IChannel, que proporciona un método GetProperty<T> como mecanismo superpuesto para acceder a las características arbitrarias expuestas por los canales de la pila. Las cinco formas del canal que extienden IChannel son:
Además, cada una de estas formas tiene un equivalente que extiende System.ServiceModel.Channels.ISessionChannel<TSession> para admitir las sesiones. Estos son:
Las formas de canal se traman después de algunos de los patrones fundamentales de intercambio de mensajes admitidos por los protocolos de transporte existentes. Por ejemplo, la mensajería unidireccional corresponde a un IInputChannel/IOutputChannel par, request-reply corresponde a IRequestChannel/IReplyChannel pares y las comunicaciones dúplex bidireccionales corresponden a IDuplexChannel (que extiende tanto IInputChannel como IOutputChannel).
Programación con Channel Stack
Las pilas de canales se suelen crear con un modelo de generador en el que un enlace crea la pila de canales. En el lado de envío, se utiliza un enlace para crear un ChannelFactory, que a su vez crea una pila de canal y devuelve una referencia al canal superior en la pila. Después, la aplicación puede usar este canal para enviar mensajes. Para más información, consulte Programación a nivel de canal de cliente.
En el lado de la recepción, se usa un enlace para crear un IChannelListener, que realiza escuchas para los mensajes entrantes. IChannelListener proporciona mensajes a la aplicación de escucha mediante la creación de pilas de canales y la entrega de la referencia de la aplicación al canal superior. A continuación, la aplicación usa este canal para recibir mensajes entrantes. Para obtener más información, consulte Programación del servicio Channel-Level.
El modelo de objetos del canal
El modelo de objetos de canal es el conjunto básico de interfaces necesarias para implementar canales, agentes de escucha de canales y generadores de canales. También hay algunas clases base proporcionadas para ayudar en implementaciones personalizadas.
Los agentes de escucha del canal son responsables de escuchar los mensajes entrantes y, a continuación, entregarlos a la capa anterior a través de canales creados por el agente de escucha del canal.
Los generadores de canales son responsables de crear canales que se usan para enviar mensajes y para cerrar todos los canales que crearon cuando se cierra el generador de canales.
ICommunicationObject es la interfaz principal que define la máquina de estado básica que implementan todos los objetos de comunicación. CommunicationObject proporciona una implementación de esta interfaz central de la cual otras clases de canal pueden derivar en lugar de volver a implementar la interfaz. Sin embargo, esto no es necesario: un canal personalizado puede implementar ICommunicationObject directamente y no heredar de CommunicationObject. Ninguna de las clases de la figura 3 se considera parte del modelo de canal; son asistentes disponibles para los implementadores de canales personalizados que desean crear canales.
En los temas siguientes se describe el modelo de objetos de canal, así como varias áreas de desarrollo que ayudan a crear canales personalizados.
| Tema | Descripción |
|---|---|
| Servicio: escuchas de canales y canales | Describe los agentes de escucha del canal, que realizan escuchas de los canales entrantes en una aplicación de servicio. |
| Cliente: Generadores de canales y canales | Describe los generadores de canales, que crean canales para conectarse a una aplicación de servicio. |
| Descripción de los cambios de estado | Describe cómo la interfaz System.ServiceModel.ICommunicationObject modela cambios de estado en los canales. |
| Elección de un patrón de intercambio de mensajes | Describe los seis patrones básicos de intercambio de mensajes que los canales pueden admitir. |
| Control de excepciones y errores | Describe cómo controlar errores y excepciones en canales personalizados. |
| Compatibilidad con metadatos y configuración | Describe cómo admitir el uso de canales personalizados desde el modelo de aplicación y cómo exportar e importar metadatos mediante enlaces y elementos de enlace. |