Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los canales son objetos que transportan mensajes de una aplicación a otra a través de los límites de interacción remota, tanto de un dominio de aplicación a otro, como de un proceso a otro o de un equipo a otro. Un canal puede escuchar los mensajes entrantes en un extremo, enviar los mensajes salientes a otro extremo o ambas acciones. Esto le permite conectarse con una amplia gama de protocolos, aunque Common Language Runtime no esté en el otro extremo del canal.
Los canales deben implementar la interfaz IChannel, que proporciona propiedades informativas como ChannelName y ChannelPriority. Los canales diseñados para estar atentos a la llegada de un determinado protocolo a un determinado puerto implementan IChannelReceiver mientras que los canales diseñados para enviar información implementan IChannelSender. Los objetos TcpChannel y HttpChannel implementan ambas interfaces, así que se pueden usar para enviar o recibir información.
Puede registrar canales en la infraestructura de interacción remota de dos formas:
- Si está publicando un objeto utilizable de forma remota, llame a ChannelServices.RegisterChannel antes de registrar el objeto servidor.
- Si está usando una funcionalidad del objeto utilizable de forma remota, llame a ChannelServices.RegisterChannel antes de crear una instancia del objeto servidor.
Los canales también se pueden cargar desde el archivo de configuración de interacción remota. Para obtener más información, vea Configuración.
En el cliente, los mensajes se pasan a la cadena de receptores de canal del cliente después de que hayan recorrido la cadena de contextos del cliente. El primer receptor de canal suele ser un receptor de formateador que serializa el mensaje en una secuencia que, a continuación, pasa por la cadena de receptores de canal hasta el receptor de transporte del cliente. El receptor de transporte del cliente escribe entonces la secuencia en la conexión.
En el servidor, el receptor de transporte del servidor lee las solicitudes de la conexión y pasa la secuencia de solicitud a la cadena de receptores de canal del servidor. El receptor de formateador del servidor situado al final de esta cadena deserializa la solicitud en un mensaje. A continuación, lo pasa a la infraestructura de interacción remota. Para obtener más información acerca de los receptores de canal, vea Receptores y cadenas de receptores.
Reglas de canales
Cuando un cliente llama a un método de un objeto remoto, los parámetros y el resto de los detalles relativos a la llamada son transportados por el canal hasta el objeto remoto. Los resultados de la llamada se devuelven de la misma forma. Un cliente puede seleccionar cualquiera de los canales registrados en el servidor para comunicarse con el objeto remoto, con lo que deja a los programadores la libertad de seleccionar los canales que más les convengan. También es posible personalizar un canal existente o crear uno nuevo que utilice un protocolo de comunicación diferente. Las reglas siguientes se aplican a la selección de canales:
Al menos un canal debe estar registrado en el sistema de interacción remota del servidor para poder llamar a un objeto remoto. Los canales tienen que estar registrados para poder registrar los objetos. Si un canal no está registrado en el cliente, el sistema de interacción remota elegirá o creará uno para enviar las llamadas salientes.
**Nota **Si el cliente espera recibir una función de devolución de llamada, es necesario registrar en el cliente un canal que permanezca a la escucha y configurar el servidor de manera que utilice un canal compatible.
Los canales se registran por cada dominio de aplicación. Un solo proceso puede contener múltiples dominios de aplicación. Cuando finaliza un proceso, se destruyen automáticamente todos los canales que haya registrado.
Dentro de un mismo dominio de aplicación no puede haber nombres de canales repetidos. Por ejemplo, debido a que los canales predeterminados tienen nombre, para registrar dos objetos HttpChannel en un mismo dominio de aplicación, debe cambiar los nombres de los canales antes de registrarlos. En el siguiente ejemplo de código C# se muestra este caso.
IDictionary prop = new Hashtable(); prop["name"] = "http1"; prop["port"] = "9001"; ChannelServices.RegisterChannel(new HttpChannel(prop, null, null));No puede registrar más de una vez un canal que permanezca a la escucha en un puerto determinado. Aunque se registran los canales por cada dominio de aplicación, si hay varios dominios de aplicación en un mismo equipo, éstos no pueden registrar el mismo canal que escucha en el mismo puerto.
Si no está seguro de si un puerto está disponible o no, utilice 0 (cero) al configurar el puerto de su canal y el sistema de interacción remota elegirá automáticamente un puerto disponible.
Los clientes se pueden comunicar con un objeto remoto mediante cualquier canal registrado. El sistema de interacción remota garantiza que el objeto remoto se conecta al canal correcto cuando un cliente intenta conectarse a él. El cliente es responsable de llamar a ChannelServices.RegisterChannel antes de intentar comunicarse con un objeto remoto. Si espera una función de devolución de llamada, el cliente debe registrar un canal y un puerto.
Cuando un cliente llama a un método en un proxy, la llamada es interceptada, incluida en un mensaje y pasada a una instancia de la clase RealProxy. La clase RealProxy reenvía el mensaje al receptor de mensajes para que lo procese. Un receptor de mensajes establece una conexión con el canal registrado por el objeto remoto y envía el mensaje por el canal al dominio de aplicación de origen. Una vez allí, se resuelven las referencias del mensaje y se llama al objeto remoto propiamente dicho.
Cuando el sistema de interacción remota inicializa un proxy de un objeto remoto en el dominio del cliente, se llama a IChannelSender.CreateMessageSink en el canal seleccionado para recuperar desde el canal configurado por el cliente un receptor de mensajes capaz de comunicarse con el objeto remoto.
Uno de los aspectos más complejos del sistema de interacción remota es la relación entre objetos remotos y canales. Por ejemplo, ¿cómo puede escuchar un objeto remoto WellKnownObjectMode.SingleCall a los clientes que debe conectar si el objeto se activa únicamente cuando llega una llamada?
Es posible, en parte, porque los objetos remotos comparten canales, es decir, un objeto remoto no posee ningún canal. Las aplicaciones de servidor que alojan objetos remotos deben registrar en el sistema de interacción remota los canales que necesitan así como los objetos que desean exponer. Cuando se registra un canal, automáticamente empieza a escuchar por si llegan solicitudes de clientes al puerto especificado. En el caso de las llamadas sincrónicas, la conexión desde el cliente se mantiene mientras dura la llamada del mensaje. Puesto que cada conexión de un cliente se controla en su propio subproceso, un único canal puede atender a varios clientes a la vez.
Vea también
Información general de .NET Remoting | HttpChannel | TcpChannel | Elegir un canal | Formateadores de serialización | Receptores y cadenas de receptores