Uso de HTTP como transporte RPC
RPC a través de HTTP permite a los programas cliente usar Internet para ejecutar procedimientos proporcionados por programas de servidor en redes distantes. RPC a través de túneles HTTP realiza sus llamadas a través de un puerto HTTP establecido. Por lo tanto, sus llamadas pueden cruzar firewalls de red en las redes cliente y servidor.
RPC a través de HTTP enruta sus llamadas al proxy RPC ubicado en la red del servidor RPC. El proxy RPC establece y mantiene una conexión con el servidor RPC. Actúa como proxy, envía llamadas a procedimiento remoto al servidor RPC y envía las respuestas del servidor a través de Internet a la aplicación cliente. Este proceso se muestra en el diagrama siguiente.
En el diagrama se muestra un firewall en la red de la aplicación cliente. Esto no es necesario para que RPC a través de HTTP funcione. Sin embargo, si la red cliente tiene un firewall, también necesitará un programa de servidor proxy, como el servidor proxy de Microsoft.
Cuando el programa cliente emite una llamada a procedimiento remoto mediante HTTP como transporte, la biblioteca en tiempo de ejecución rpc en el cliente se pone en contacto con el proxy RPC. Dependiendo de si se pidió al cliente RPC que usara el puerto HTTP o HTTPS (HTTP con SSL) 80 o el puerto 443, respectivamente. El proxy RPC se pone en contacto con el programa de servidor RPC y establece una conexión TCP/IP. El cliente y el proxy RPC mantienen su conexión HTTP o HTTPS a través de Internet. La conexión HTTP o HTTPS del cliente al proxy RPC puede pasar a través de un firewall (sujeto a los permisos de acceso adecuados) si hay uno presente. A continuación, el servidor puede ejecutar la llamada a procedimiento remoto y usar la conexión a través del proxy RPC para responder al cliente. El proxy RPC es una extensión ISAPI que se ejecuta en el contexto de IIS.
Si el cliente o el servidor se desconectan por cualquier motivo, el proxy RPC lo detectará y finalizará la sesión rpc. Siempre que la sesión continúe, el proxy RPC mantendrá sus conexiones con el cliente y el servidor. Reenviará las llamadas a procedimientos remotos desde el cliente al servidor y enviará respuestas desde el servidor al cliente.
El programa cliente RPC puede tunelizar sus llamadas RPC a través de Internet mediante la creación de un enlace de cadena con el formato:
[object_uuid@]ncacn_http:rpc_server[endpoint,HttpProxy=proxy_server:http_port,RpcProxy=rpc_proxy:rpc_port,HttpConnectionOption=UseHttpProxy]
Donde:
object_uuid especifica un UUID de objeto RPC. Para obtener más información, vea Generar UUID de interfaz y UUID de cadena.
ncacn_http selecciona la especificación de secuencia de protocolo para RPC a través de HTTP. Para obtener más información, vea Constantes de secuencia de protocolo y enlace de cadenas.
rpc_server es la dirección de red del equipo que ejecuta el proceso del servidor RPC. La dirección del servidor debe especificarse en un formulario visible y comprensible por el equipo proxy RPC, no por el cliente. Puesto que el cliente no se conecta directamente al servidor, no es necesario poder resolver el nombre del servidor ni establecer una conexión con él. El proxy RPC establecerá la conexión en nombre del cliente y, por lo tanto, rpc_server debe ser un nombre reconocible por el proxy RPC.
endpoint especifica el puerto TCP/IP al que escucha el proceso del servidor RPC para las llamadas a procedimientos remotos. Para obtener más información, vea Buscar puntos de conexión.
HttpProxy especifica opcionalmente un servidor proxy HTTP en la red del cliente RPC, como el servidor proxy de Microsoft. Si se selecciona un servidor proxy, no se especifica ningún número de puerto, el código auxiliar RPC usa el puerto 80 de forma predeterminada si no se solicita SSL y el puerto 443 si se especifica SSL.
RpcProxy especifica la dirección y el número de puerto del equipo IIS que actúa como proxy para el servidor RPC. Solo tiene que especificar esto si el proceso del servidor RPC reside en un equipo diferente al proxy RPC. Si no especifica un número de puerto, el código auxiliar del cliente RPC usa de forma predeterminada el puerto 80 si no se especifica SSL y usa el puerto 443 si se especifica SSL (HTTPS).
HttpConnectionOption permite dirigir el comportamiento de RPC al realizar conexiones HTTP. El valor UseHttpProxy indica a RPC que enrute su tráfico a través del proxy Http en todo momento, incluido cuando el cliente tiene sus opciones de Internet establecidas en Internet Explorer como "Omitir servidor proxy para direcciones locales".
Esta opción es compatible con Windows 7, Windows Server 2008 R2, Windows 8.1 y Windows Server 2012 R2 con KB2916915 instalado. Esta opción no se admite en Windows 8 y Windows Server 2012. Las aplicaciones pueden determinar si esta opción es compatible con el entorno de ejecución rpc comprobando el valor del Registro ConnectionOptionsFlag ubicado en la siguiente clave del Registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc
Si se establece el bit 0 (LSB) de este valor del Registro, se admite esta opción específica; de lo contrario, esta opción no es compatible con el entorno de ejecución rpc en el sistema.
Para obtener más información sobre cómo crear enlaces de cadena, vea Binding and Handles( Enlace y identificadores).
El programa de servidor RPC puede aceptar llamadas RPC tuneladas escuchando en la secuencia del protocolo ncacn_http.
Microsoft tiene dos implementaciones principales de RPC a través de HTTP: versión 1 y versión 2.
La versión 1 (denominada RPC a través de HTTP v1) se admite a través de Windows XP. La versión 1 del proxy RPC se admite a través de Windows 2000.
La versión 2 (denominada RPC a través de HTTP v2) es la versión actual.
Las dos versiones tienen diferentes funcionalidades y una interoperabilidad limitada. Aquí se proporciona un resumen de las diferencias. Para conocer las consideraciones de interoperabilidad, consulte Requisitos del sistema e interoperabilidad para RPC a través de HTTP.
- RPC a través de HTTP v1 requiere que la tunelización SSL esté habilitada en todos los servidores proxy/firewalls HTTP entre el RPC a través del cliente HTTP y el proxy RPC. RPC a través de HTTP v1 intenta compilar un túnel SSL a través del puerto 80 aunque los datos que envía no están realmente cifrados ssl. Normalmente, los servidores proxy y los firewalls rechazan estas solicitudes, a menos que se configuren explícitamente para permitirlas. RPC a través de HTTP v2 no tiene este requisito.
- RPC a través de HTTP v1 no puede establecer una sesión SSL en el proxy RPC. El RPC a través de HTTP v2 puede enviar todo RPC a través del tráfico HTTP dentro de una sesión SSL; de forma predeterminada, v2 requiere que los datos se envíen dentro de una sesión SSL.
- RPC a través de HTTP v1 no se puede autenticar en el proxy RPC. RPC a través de HTTP v2 puede autenticarse; De forma predeterminada, v2 requiere autenticación en el proxy RPC.
- El proxy RPC v1 no funciona correctamente cuando el equipo IIS en el que está instalado forma parte de una granja de servidores web. El proxy RPC v2 funciona correctamente cuando el equipo IIS en el que está instalado forma parte de una granja de servidores web.
Nota
Si Microsoft Internet Explorer está instalado en el equipo del programa cliente y el cliente no especifica httpProxy en su enlace de cadena, el código auxiliar del cliente RPC buscará en el registro en el equipo cliente una entrada HttpProxy . Si encuentra uno, usará el proxy especificado en la entrada del Registro.
Supongamos, por ejemplo, que el programa cliente debe conectarse a través de Internet a un servidor RPC en un equipo denominado Server7.microsoft.com. Además, supongamos que el proxy RPC se ejecuta en Major7.microsoft.com. El programa de servidor RPC escucha el puerto 2225. El cliente usaría el enlace de cadena:
ncacn_http:Server7.microsoft.com[2225, RpcProxy=Major7.microsoft.com]
Si el proxy RPC puede resolver el nombre del servidor como Server7, sin necesidad de un nombre de dominio completo, también puede especificar:
ncacn_http:Server7 [2225, RpcProxy=Major7.microsoft.com]
Si la red cliente usa un firewall y un servidor proxy de Internet denominado myproxy, e Internet Explorer en el cliente no está configurado para usar ese proxy, deberá modificar el enlace de cadena del cliente a:
ncacn_http:Server7.microsoft.com[,HttpProxy=myproxy:80,RpcProxy=Major7.microsoft.com:80]
Esto dirige al cliente para conectarse al programa de servidor RPC en Server7.microsoft.com. Para ello, el cliente usará primero el puerto 80 (o el puerto 443 si se usa SSL) para conectarse a myproxy. Esto proporcionará al programa cliente acceso a Internet. Con Internet, el programa cliente siguiente se conecta al proxy RPC en Major7.microsoft.com. El proxy RPC establecerá una conexión con el programa de servidor RPC que se ejecuta en Server7.microsoft.com.
Si la red cliente usa un firewall y si el proxy RPC no se puede acceder directamente, para establecer una conexión más rápido, el enlace de cadena de cliente se puede modificar a:
ncacn_http:Server7.microsoft.com[RpcProxy=Major7.microsoft.com:80,HttpConnectionOption=UseHttpProxy]
HttpConnectionOption permite dirigir el comportamiento de RPC al realizar conexiones HTTP. El valor UseHttpProxy indica a RPC que enrute su tráfico a través del proxy Http en todo momento, incluido cuando el cliente tiene sus opciones de Internet establecidas en Internet Explorer como "Omitir servidor proxy para direcciones locales". Esto indica al cliente que se conecte con fuerza al proxy RPC a través del proxy Http. Esto acelera el tiempo para establecer una conexión, ya que omite cualquier retraso en la búsqueda del servidor RPC directamente antes de usar el proxy HTTP.
Si se usa la opción HttpConnectionOption e Internet Explorer en el cliente no está configurado para usar ese proxy Http, es posible que se produzca un error en las conexiones con RPC_S_INVALID_NETWORK_OPTIONS.
La gran mayoría de los equipos actualmente están configurados para la exploración web. Por lo tanto, la mayoría de los clientes no necesitan especificar HttpProxy, ya que se recuperarán de la configuración de conectividad a Internet.