Búsqueda de puntos de conexión

Los programas de servidor escuchan los puntos de conexión para las solicitudes de cliente. La sintaxis de la cadena de punto de conexión depende de la secuencia de protocolo que use. Por ejemplo, el punto de conexión para TCP/IP es un número de puerto y la sintaxis del punto de conexión para las canalizaciones con nombre es un nombre de canalización válido.

Hay dos tipos de puntos de conexión: conocidos y dinámicos. La elección del tipo de punto de conexión que usa el programa determina si la aplicación distribuida o la biblioteca en tiempo de ejecución especifica el punto de conexión.

En esta sección se describen los puntos de conexión y se presenta información sobre cómo encontrarlos. Se organiza en los temas siguientes:

Nota

Los términos puntos de conexión estáticos y puntos de conexión conocidos son equivalentes y se usan indistintamente.

 

Es posible que la aplicación cliente use el mapa de puntos de conexión para determinar si un programa de servidor se está ejecutando actualmente. El cliente puede llamar a RpcMgmtInqIfIds, RpcMgmtEpEltInqBegin y RpcMgmtEpEltInqDone para ver si el servidor ha registrado la interfaz determinada que requiere en el mapa del punto de conexión.

Uso de puntos de conexión conocidos

Los puntos de conexión conocidos son puntos de conexión asignados previamente que el programa de servidor usa cada vez que se ejecuta. Dado que el servidor siempre escucha ese punto de conexión determinado, el cliente siempre intenta conectarse a él. Normalmente, la autoridad responsable del protocolo de transporte asigna puntos de conexión conocidos. Dado que los equipos host de servidor tienen un número finito de puntos de conexión disponibles, los desarrolladores de aplicaciones no se recomienda encarecidamente usar puntos de conexión conocidos. Otra ventaja de los puntos de conexión dinámicos es que simplifican la administración y el mantenimiento a largo plazo del sistema.

Una aplicación distribuida puede especificar un punto de conexión conocido en una cadena y pasar esa cadena como parámetro a la función RpcServerUseProtseqEp. Como alternativa, la cadena de punto de conexión puede aparecer en el encabezado de interfaz de archivo IDL como parte del atributo de interfaz [ endpoint].

Puede usar dos enfoques para implementar el punto de conexión conocido:

  • Especificar toda la información de un enlace de cadena
  • Almacenamiento del punto de conexión conocido en la base de datos del servicio de nombres

Puede escribir toda la información necesaria para establecer un enlace en una aplicación distribuida al desarrollarla. El cliente puede especificar el punto de conexión conocido directamente en una cadena, llamar a RpcStringBindingCompose para crear una cadena que contenga toda la información de enlace y proporcionar esta cadena a la función RpcBindingFromStringBinding para obtener un identificador. El cliente y el servidor se pueden codificar de forma rígida para usar un punto de conexión conocido o escribirse para que la información del punto de conexión proceda de la línea de comandos, un archivo de datos, un archivo de configuración o el archivo IDL.

La aplicación cliente también puede consultar una base de datos de servicio de nombres para obtener información de punto de conexión conocida.

Uso de puntos de conexión dinámicos

El número de puntos de conexión para un servidor determinado y una secuencia de protocolo determinada suelen ser limitadas. Por ejemplo, cuando se usa la secuencia de protocolo ncacn_ip_tcp , lo que indica que la comunicación de red RPC se produce mediante TCP/IP, solo hay disponible un número limitado de puertos (la mayoría de los sistemas solo tienen abierto el intervalo de 1025 a 5000). Las bibliotecas en tiempo de ejecución rpc permiten asignar puntos de conexión dinámicamente, según sea necesario. Dado que el número de UUID de interfaz posibles es prácticamente ilimitado, el uso del UUID de interfaz para dirigir la llamada ofrece más espacio para la expansión y más flexibilidad.

De forma predeterminada, las funciones de la biblioteca en tiempo de ejecución rpc buscan información de punto de conexión cuando consultan una base de datos de servicio de nombres. Si el punto de conexión es dinámico, la base de datos del servicio de nombres no contendrá información del punto de conexión. Sin embargo, la consulta proporcionará al programa cliente el nombre de un servidor. A continuación, puede buscar en el mapa del punto de conexión del servidor.

Si el cliente necesita realizar una llamada a procedimiento remoto mediante un punto de conexión dinámico, el método preferido es realizar la llamada en un identificador de enlace enlazado parcialmente. El tiempo de ejecución de RPC resuelve el punto de conexión de forma transparente. Este método es superior al uso de la función RpcEpResolveBinding , ya que permite mecanismos avanzados de almacenamiento en caché en tiempo de ejecución de RPC.

Si se requiere un control más específico sobre la selección del punto de conexión, los clientes pueden buscar una entrada cada vez mediante una llamada a las funciones RpcMgmtEpEltInqBegin, RpcMgmtEpEltInqNext y RpcMgmtEpEltInqDone .

Exportación de puntos de conexión conocidos a la base de datos de asignación de puntos de conexión

Es posible mezclar los dos enfoques para encontrar puntos de conexión, especialmente cuando un sistema distribuido realiza la transición de un modelo de punto de conexión conocido a un modelo de punto de conexión dinámico. En estas transiciones, una versión intermedia del servidor usará un punto de conexión conocido, pero también registrará el punto de conexión conocido con la base de datos de mapa de puntos de conexión. Este enfoque permite a los clientes que usan un punto de conexión conocido y clientes que usan un punto de conexión dinámico para conectarse. Una vez actualizados todos los servidores, solo se puede implementar una nueva versión de cliente que use puntos de conexión dinámicos. Una vez actualizados todos los clientes, una versión final del servidor puede dejar de usar puntos de conexión conocidos y empezar a usar solo puntos de conexión dinámicos.

Este enfoque permite una ruta de acceso de transición para las aplicaciones que se han iniciado con un punto de conexión conocido, pero que quieren migrar a un punto de conexión dinámico sin necesidad de una actualización simultánea de todos los servidores y clientes.