Compartir a través de


Disponibilidad del servidor en la red

Para que una aplicación de servidor pueda aceptar llamadas a procedimiento remoto, debe estar disponible en la red. Para ello, el servidor indica al tiempo de ejecución de RPC que está dispuesto a aceptar llamadas en una o varias secuencias de protocolo. Elegir las secuencias de protocolo que admite una aplicación de servidor es una decisión importante; las diferentes secuencias de protocolo tienen funcionalidades muy distintas. Los servidores que esperan que las llamadas se reciban localmente deben usar ncalrpc. Los servidores que aceptan llamadas remotas deben usar ncacn_ip_tcp. Los servidores no deben comprobar que la secuencia de protocolo en la que reciben llamadas es la secuencia de protocolo en la que esperan recibir llamadas. Para obtener más información, consulte el artículo sobre ser cuidadoso con otros puntos de conexión de RCP que se ejecutan en el mismo proceso.

En el ejemplo de código siguiente se usa ncacn_ip_tcp.

La mayoría de los programas de servidor usan todas las secuencias de protocolo disponibles en la red. Para ello, invocan la función RpcServerUseProtseq, como se muestra en el siguiente fragmento de código:

RPC_STATUS status;
status = RpcServerUseProtseq(
    L"ncacn_ip_tcp",
    RPC_C_PROTSEQ_MAX_REQS_DEFAULT,    // Protseq-dependent parameter
    NULL);                             // Always specify NULL here.

El primer parámetro de la función RpcServerUseProtseq es la secuencia de protocolo. El segundo parámetro depende de la secuencia de protocolo. Como se muestra en el ejemplo de código, la mayoría de los programas de servidor establecen ese parámetro en RPC_C_PROTSEQ_MAX_REQS_DEFAULT. Ese valor establece la biblioteca de RPC para usar el valor predeterminado. El tercer parámetro es un descriptor de seguridad y no debe usarse en las aplicaciones. Para obtener más información, consulte Seguridad (RPC).

También puede llamar a las funciones RpcServerUseAllProtseqs, RpcServerUseProtseqEx, RpcServerUseProtseqEp o RpcServerUseProtseqEpEx.

Después de que una aplicación de servidor seleccione al menos una secuencia de protocolo, los servidores que usan puntos de conexión dinámicos deben crear información de enlace para cada secuencia de protocolo que usa. El servidor almacena la información de enlace en un vector de enlace que puede exportar al servicio de asignador de puntos de conexión.

Use la función RpcServerInqBindings para obtener un vector de enlace para la aplicación de servidor, como se muestra en el ejemplo siguiente:

RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
 
status = RpcServerInqBindings(&rpcBindingVector);

El único parámetro pasado a la función RpcServerInqBindings es un puntero a un puntero a una estructura RPC_BINDING_VECTOR. La biblioteca en tiempo de ejecución de RPC asigna dinámicamente una matriz de vectores de enlace y almacena la dirección de la matriz en esa variable de parámetro (en este caso, rpcBindingVector). Una vez que la aplicación de servidor haya terminado de usar ese vector de enlace (por ejemplo, después de pasarla a las funciones adecuadas), la aplicación de servidor es responsable de liberar ese vector de enlace mediante la función RpcBindingVectorFree.