Compartir a través de


Especificar secuencias de protocolo

Las aplicaciones de servidor deben seleccionar una o varias secuencias de protocolo que se usarán al comunicarse con el cliente a través de la red. La elección de secuencias de protocolos depende de la red. Consulte Interpretación de la información de enlace y Selección de una secuencia de protocolo.

El programa de servidor puede permitir que los clientes se conecten mediante cualquier secuencia de protocolo que admita la red. Para ello, invoque RpcServerUseAllProtseqs y pase RPC_C_PROTSEQ_MAX_REQS_DEFAULT como primer parámetro. Sin embargo, no es el enfoque recomendado. En su lugar, el uso de ncalrpc para llamadas locales y ncacn_ip_tcp o ncacn_http para llamadas remotas suele ser suficiente. Las redes heterogéneos son poco frecuentes y prácticamente todas las redes admiten TCP/IP.

Si desea que el cliente restrinja la asignación de puertos para los puntos de conexión dinámicos a un intervalo de puertos específico, llame a RpcServerUseAllProtseqsEx en su lugar. Esta función es específica de Rpc de Microsoft y es muy útil para las llamadas a procedimientos remotos que pasan a través de un firewall. Usa un parámetro adicional para pasar las marcas de control de asignación de puertos a la función. Consulte Configuración del Registro para asignaciones de puertos y enlace selectivo.

Puede especificar secuencias de protocolo e información de punto de conexión en el archivo MIDL al desarrollar las interfaces del servidor. Si lo hace, el servidor debe usar RpcServerUseAllProtseqsIf para registrar todas las secuencias de protocolo y la información de punto de conexión asociada proporcionada en el archivo IDL. Además, hay una función RpcServerUseAllProtseqsIfEx correspondiente que también permite al servidor pasar las marcas de control de asignación de puertos.

Si desea configurar los programas cliente y servidor para comunicarse con una secuencia de protocolo especificada, la aplicación de servidor debe llamar a RpcServerUseProtseq. Para obtener una lista completa de las secuencias de protocolo RPC de Microsoft, vea Constantes de secuencia de protocolo.

Microsoft RPC también proporciona RpcServerUseProtseqEx para permitir que las aplicaciones seleccionen secuencias de protocolo específicas y controlen la asignación dinámica de puertos.

Además de los protocolos orientados a la conexión, Microsoft RPC también admite protocolos datagramas (sin conexión). Se recomiendan protocolos orientados a la conexión; Los protocolos de datagram tienen diferentes conjuntos de características que los protocolos orientados a la conexión y solo se deben usar si un desarrollador de sistemas distribuidos requiere una característica disponible solo en protocolos de datagramas. Algunas de las características disponibles al usar protocolos de datagrama son:

  • Los datagramas admiten los protocolos de transporte sin conexión UDP e IPX.
  • Dado que no es necesario establecer y mantener una conexión, el protocolo RPC del datagrama requiere menos sobrecarga de recursos.
  • Los datagramas permiten un enlace más rápido.
  • Al igual que con RPC orientado a la conexión, las llamadas RPC de datagramas son nonidempotentes de forma predeterminada. Esto significa que se garantiza que la llamada no se ejecute más de una vez. Sin embargo, una función se puede marcar como idempotente en el archivo IDL que indica a RPC que es inofensivo ejecutar la función más de una vez en respuesta a una única solicitud de cliente. Esto permite que el tiempo de ejecución mantenga menos estado en el servidor. Tenga en cuenta que una llamada idempotente se volvería a ejecutar solo en raras circunstancias en una red inestable.
  • Datagram RPC admite el atributo IDL de difusión . La difusión permite a un cliente emitir mensajes a varios servidores al mismo tiempo. Esto permite al cliente localizar uno de varios servidores disponibles en la red o controlar varios servidores simultáneamente. Tenga en cuenta que la difusión del datagrama solo es válida dentro del vínculo local y normalmente no cruza enrutadores. Las llamadas de difusión son implícitamente idempotentes. Si la llamada contiene parámetros [out], solo se devuelve la primera respuesta del servidor. Una vez que un servidor responde, todos los RPC futuros sobre ese identificador de enlace se enviarán solo a ese servidor, incluidas las llamadas con el atributo broadcast. Para enviar otra difusión, cree un nuevo identificador de enlace o llame a RpcBindingReset en el identificador existente.
  • Datagram RPC admite el atributo tal vez IDL. Esto permite al cliente enviar una llamada al servidor sin esperar una respuesta o confirmación. La llamada no puede contener parámetros [out]. Las llamadas que usan las llamadas [tal vez] son implícitamente idempotentes.