Búsqueda de puntos de conexión

Los programas de servidor escuchan los puntos de conexión de 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 analizan 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 la asignación de punto de conexión para determinar si un programa de servidor se está ejecutando actualmente o no. El cliente puede llamar a RpcMgmtInqIfIds, RpcMgmtEpEltInqBeginy RpcMgmtEpEltInqDone para ver si el servidor ha registrado la interfaz concreta que requiere en la asignación 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 a ese punto de conexión determinado, el cliente siempre intenta conectarse a él. Normalmente, la autoridad responsable del protocolo de transporte asigna los puntos de conexión conocidos. Dado que los equipos host de servidor tienen un número finito de puntos de conexión disponibles, se desaconseja encarecidamente a los desarrolladores de aplicaciones el uso de 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 de ] punto de conexión.

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

  • Especificar toda la información en un enlace de cadena
  • Almacenamiento del punto de conexión conocido en la base de datos de 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 automática para usar un punto de conexión conocido o escribirse de forma que la información del punto de conexión procede 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 limitados. Por ejemplo, cuando se usa la secuencia de protocolo _ tcp _ de ip ncacn, que indica que la comunicación de red RPC se produce mediante TCP/IP, solo hay un número limitado de puertos disponibles (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 le dará al programa cliente el nombre de un servidor. A continuación, puede buscar en el mapa de puntos 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 de almacenamiento en caché avanzados en el 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 en el mapa de punto de conexión una entrada a la vez llamando a las funciones RpcMgmtEpEltInqBegin, RpcMgmtEpEltInqNexty RpcMgmtEpEltInqDone.

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

Es posible combinar los dos enfoques para buscar puntos de conexión, especialmente cuando un sistema distribuido está transfiriendo 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 del mapa de puntos de conexión. Este enfoque permite a los clientes que usan un punto de conexión conocido y a los clientes que usan un punto de conexión dinámico conectarse. Una vez actualizados todos los servidores, se puede implementar una nueva versión de cliente que use solo 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 desean migrar a un punto de conexión dinámico sin necesidad de una actualización simultánea de todos los servidores y clientes.