Utilisation de HTTP comme transport RPC
RPC-over-HTTP permet aux programmes clients d’utiliser Internet pour exécuter des procédures fournies par les programmes serveur sur des réseaux distants. RPC sur HTTP tunnelise ses appels via un port HTTP établi. Ainsi, ses appels peuvent traverser des pare-feu réseau sur les réseaux client et serveur.
RPC sur HTTP achemine ses appels vers le proxy RPC situé sur le réseau du serveur RPC. Le proxy RPC établit et maintient une connexion au serveur RPC. Il sert de proxy pour distribuer les appels de procédure distante au serveur RPC et renvoyer les réponses du serveur sur Internet à l’application cliente. Ce processus est illustré dans le diagramme suivant.
Le diagramme montre un pare-feu sur le réseau de l’application cliente. Cela n’est pas nécessaire pour que RPC sur HTTP fonctionne. Toutefois, si le réseau client a un pare-feu, il aura également besoin d’un programme de serveur proxy tel que Microsoft Proxy Server.
Lorsque le programme client émet un appel de procédure distante en utilisant HTTP comme transport, la bibliothèque d’exécution RPC sur le client contacte le proxy RPC. Selon que le client RPC a été invité à utiliser http ou HTTPS (HTTP avec SSL) le port 80 ou le port 443 est utilisé, respectivement. Le proxy RPC contacte le programme serveur RPC et établit une connexion TCP/IP. Le client et le proxy RPC conservent leur connexion HTTP ou HTTPS sur Internet. La connexion HTTP ou HTTPS du client au proxy RPC peut passer par un pare-feu (sous réserve des autorisations d’accès appropriées) s’il y en a un. Le serveur peut ensuite exécuter l’appel de procédure distante et utiliser la connexion via le proxy RPC pour répondre au client. Le proxy RPC est une extension ISAPI exécutée dans le contexte d’IIS.
Si le client ou le serveur se déconnecte pour une raison quelconque, le proxy RPC le détecte et met fin à la session RPC. Tant que la session continue, le proxy RPC conserve ses connexions au client et au serveur. Il transfère les appels de procédure distante du client au serveur et envoie des réponses du serveur au client.
Le programme client RPC peut tunneliser ses appels RPC via Internet en créant une liaison de chaîne au format :
[object_uuid@]ncacn_http:rpc_server[endpoint,HttpProxy=proxy_server:http_port,RpcProxy=rpc_proxy:rpc_port,HttpConnectionOption=UseHttpProxy]
Où :
object_uuid spécifie un UUID d’objet RPC. Pour plus d’informations, consultez Génération d’UUID d’interface et UUID de chaîne.
ncacn_http sélectionne la spécification de séquence de protocole pour RPC sur HTTP. Pour plus d’informations, consultez Constantes de séquence de protocole et Liaison de chaîne.
rpc_server est l’adresse réseau de l’ordinateur qui exécute le processus du serveur RPC. L’adresse du serveur doit être spécifiée sous une forme visible et compréhensible par l’ordinateur proxy RPC, et non par le client. Étant donné que le client ne se connecte pas directement au serveur, il n’a pas besoin d’être en mesure de résoudre le nom du serveur ou d’établir une connexion à celui-ci. Le proxy RPC établit la connexion pour le compte du client et, par conséquent, rpc_server doit être un nom reconnaissable par le proxy RPC.
Endpoint spécifie le port TCP/IP que le processus serveur RPC écoute pour les appels de procédure distante. Pour plus d’informations, consultez Recherche de points de terminaison.
HttpProxy spécifie éventuellement un serveur proxy HTTP sur le réseau du client RPC, tel que le serveur proxy Microsoft. Si un serveur proxy est sélectionné, aucun numéro de port n’est spécifié, le stub RPC utilise le port 80 par défaut si SSL n’est pas demandé et le port 443 si SSL est spécifié.
RpcProxy spécifie l’adresse et le numéro de port de l’ordinateur IIS qui sert de proxy au serveur RPC. Vous devez uniquement spécifier cette valeur si le processus serveur RPC réside sur un autre ordinateur que le proxy RPC. Si vous ne spécifiez pas de numéro de port, le stub client RPC utilise par défaut le port 80 si SSL n’est pas spécifié et le port 443 si SSL (HTTPS) est spécifié.
HttpConnectionOption vous permet éventuellement de diriger le comportement de RPC lors de l’établissement de connexions HTTP. La valeur UseHttpProxy indique à RPC d’acheminer son trafic via le proxy Http à tout moment, y compris lorsque les options Internet du client sont définies dans Internet Explorer à « Contourner le serveur proxy pour les adresses locales ».
Cette option est prise en charge sur Windows 7, Windows Server 2008 R2, Windows 8.1 et Windows Server 2012 R2 avec KB2916915 installé. Cette option n’est pas prise en charge sur Windows 8 et Windows Server 2012. Les applications peuvent déterminer si cette option est prise en charge par le runtime RPC en vérifiant la valeur de Registre ConnectionOptionsFlag située sous la clé de Registre suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc
Si le bit 0 (LSB) de cette valeur de Registre est défini, cette option spécifique est prise en charge ; sinon, cette option n’est pas prise en charge par le runtime RPC dans le système.
Pour plus d’informations sur la création de liaisons de chaînes, consultez Liaison et handles.
Le programme serveur RPC peut accepter les appels RPC tunnelés en écoutant la séquence de protocole ncacn_http.
Microsoft a deux implémentations principales de RPC sur HTTP : version 1 et version 2.
La version 1 (appelée RPC sur HTTP v1) est prise en charge via Windows XP. La version 1 du proxy RPC est prise en charge via Windows 2000.
La version 2 (appelée RPC sur HTTP v2) est la version actuelle.
Les deux versions ont des fonctionnalités différentes et une interopérabilité limitée. Un résumé des différences est fourni ici. Pour plus d’informations sur l’interopérabilité, consultez Configuration requise et interopérabilité pour RPC sur HTTP.
- RPC sur HTTP v1 nécessite que le tunneling SSL soit activé sur tous les proxys/pare-feu HTTP entre le client RPC sur HTTP et le proxy RPC. RPC sur HTTP v1 tente de créer un tunnel SSL sur le port 80, même si les données qu’il envoie ne sont pas réellement chiffrées par SSL. Les proxys et les pare-feu rejettent généralement ces demandes, sauf s’ils sont explicitement configurés pour les autoriser. RPC sur HTTP v2 n’a pas d’exigence de ce type.
- RPC sur HTTP v1 ne peut pas établir une session SSL sur le proxy RPC. Le rpc sur HTTP v2 peut envoyer tout le trafic RPC via HTTP au sein d’une session SSL ; par défaut, la version 2 nécessite que les données soient envoyées dans une session SSL.
- RPC sur HTTP v1 ne peut pas s’authentifier auprès du proxy RPC. RPC sur HTTP v2 peut s’authentifier ; par défaut, la version 2 nécessite l’authentification auprès du proxy RPC.
- Le proxy RPC v1 ne fonctionne pas correctement lorsque l’ordinateur IIS sur lequel il est installé fait partie d’une batterie de serveurs web. Le proxy RPC v2 fonctionne correctement lorsque l’ordinateur IIS sur lequel il est installé fait partie d’une batterie de serveurs web.
Notes
Si Microsoft Internet Explorer est installé sur l’ordinateur du programme client et que votre client ne spécifie pas de HttpProxy dans sa liaison de chaîne, le stub du client RPC recherche une entrée HttpProxy dans le Registre sur l’ordinateur client. S’il en trouve un, il utilise le proxy spécifié dans l’entrée de Registre.
Supposons que, par instance, votre programme client doit se connecter via Internet à un serveur RPC sur un ordinateur appelé Server7.microsoft.com. En outre, supposons que le proxy RPC s’exécute sur Major7.microsoft.com. Le programme serveur RPC écoute le port 2225. Votre client utilise la liaison de chaîne :
ncacn_http:Server7.microsoft.com[2225, RpcProxy=Major7.microsoft.com]
Si le proxy RPC peut résoudre le nom du serveur en tant que Serveur7, sans nécessiter de nom de domaine complet, vous pouvez également spécifier :
ncacn_http:Server7 [2225, RpcProxy=Major7.microsoft.com]
Si le réseau client utilise un pare-feu et un serveur proxy Internet appelé myproxy, et que l’Explorer Internet sur le client n’est pas configuré pour utiliser ce proxy, vous devez modifier la liaison de chaîne du client comme suit :
ncacn_http:Server7.microsoft.com[,HttpProxy=myproxy:80,RpcProxy=Major7.microsoft.com:80]
Cela indique au client de se connecter au programme serveur RPC sur Server7.microsoft.com. Pour ce faire, le client utilisera d’abord le port 80 (ou le port 443 si SSL est utilisé) pour se connecter à myproxy. Cela permet au programme client d’accéder à Internet. À l’aide d’Internet, le programme client se connecte ensuite au proxy RPC sur Major7.microsoft.com. Le proxy RPC établit une connexion au programme serveur RPC exécuté sur Server7.microsoft.com.
Si le réseau client utilise un pare-feu et si le proxy RPC ne peut pas être atteint directement, pour obtenir une connexion établie plus rapidement, la liaison de chaîne cliente peut être modifiée comme suit :
ncacn_http:Server7.microsoft.com[RpcProxy=Major7.microsoft.com:80,HttpConnectionOption=UseHttpProxy]
L’option HttpConnectionOption vous permet de diriger le comportement de RPC lors de l’établissement de connexions HTTP. La valeur UseHttpProxy indique à RPC d’acheminer son trafic via le proxy Http à tout moment, y compris lorsque les options Internet du client sont définies dans Internet Explorer à « Contourner le serveur proxy pour les adresses locales ». Cela indique au client de se connecter de force au proxy RPC via le proxy Http. Cela accélère le temps nécessaire à l’établissement d’une connexion, car elle contourne tout délai de recherche du serveur RPC directement avant l’utilisation du proxy HTTP.
Si l’option HttpConnectionOption est utilisée et que l’Explorer Internet sur le client n’est pas configuré pour utiliser ce proxy Http, les connexions peuvent échouer avec RPC_S_INVALID_NETWORK_OPTIONS.
La grande majorité des ordinateurs d’aujourd’hui sont configurés pour la navigation web. Par conséquent, la plupart des clients n’ont pas besoin de spécifier httpProxy, car il sera récupéré à partir des paramètres de connectivité Internet.