Condividi tramite


Uso di HTTP come trasporto RPC

RPC-over-HTTP consente ai programmi client di usare Internet per eseguire le procedure fornite dai programmi server in reti distanti. RPC su HTTP esegue il tunneling delle chiamate tramite una porta HTTP stabilita. Di conseguenza, le chiamate possono attraversare firewall di rete sia nelle reti client che server.

RPC su HTTP instrada le chiamate al proxy RPC che si trova nella rete del server RPC. Il proxy RPC stabilisce e gestisce una connessione al server RPC. Funge da proxy, invia chiamate di procedura remota al server RPC e invia le risposte del server attraverso Internet all'applicazione client. Questo processo è illustrato nel diagramma seguente.

interazione tra un server rpc e un server di informazioni Internet per rpc http

Il diagramma mostra un firewall nella rete dell'applicazione client. Non è necessario per il funzionamento di RPC su HTTP. Tuttavia, se la rete client dispone di un firewall, sarà necessario anche un programma server proxy, ad esempio Microsoft Proxy Server.

Quando il programma client invia una chiamata di procedura remota usando HTTP come trasporto, la libreria di runtime RPC nel client contatta il proxy RPC. A seconda che venga richiesto al client RPC di usare rispettivamente la porta HTTP o HTTPS (HTTP con SSL) 80 o la porta 443. Il proxy RPC contatta il programma server RPC e stabilisce una connessione TCP/IP. Il client e il proxy RPC mantengono la connessione HTTP o HTTPS su Internet. La connessione HTTP o HTTPS del client al proxy RPC può passare attraverso un firewall (soggetto alle autorizzazioni di accesso appropriate) se presente. Il server può quindi eseguire la chiamata alla procedura remota e usare la connessione tramite il proxy RPC per rispondere al client. Il proxy RPC è un'estensione ISAPI in esecuzione nel contesto di IIS.

Se il client o il server si disconnette per qualsiasi motivo, il proxy RPC lo rileverà e terminerà la sessione RPC. Finché la sessione continua, il proxy RPC manterrà le connessioni al client e al server. Inoltra le chiamate di routine remota dal client al server e invierà risposte dal server al client.

Il programma client RPC può eseguire il tunneling delle chiamate RPC tramite Internet creando un'associazione di stringa del modulo:

[object_uuid@]ncacn_http:rpc_server[endpoint,HttpProxy=proxy_server:http_port,RpcProxy=rpc_proxy:rpc_port,HttpConnectionOption=UseHttpProxy]

Dove:

  • object_uuid specifica un UUID dell'oggetto RPC. Per altre informazioni, vedere Generateing Interface UUIDs and String UUID.For more information, see Generateing Interface UUIDs and String UUID.

  • ncacn_http seleziona la specifica della sequenza di protocollo per RPC su HTTP. Per altre informazioni, vedere Costanti della sequenza di protocollo e associazione di stringhe.

  • rpc_server è l'indirizzo di rete del computer che esegue il processo del server RPC. L'indirizzo del server deve essere specificato in un formato visibile e comprensibile dal computer proxy RPC, non dal client. Poiché il client non si connette direttamente al server, non deve essere in grado di risolvere il nome del server o stabilire una connessione. Il proxy RPC stabilirà la connessione per conto del client e pertanto rpc_server deve essere un nome riconoscibile dal proxy RPC.

  • endpoint specifica la porta TCP/IP su cui il processo del server RPC è in ascolto per le chiamate di procedura remota. Per altre informazioni, vedere Ricerca di endpoint.

  • HttpProxy specifica facoltativamente un server proxy HTTP nella rete del client RPC, ad esempio Microsoft Proxy Server. Se è selezionato un server proxy, non viene specificato alcun numero di porta, lo stub RPC usa la porta 80 per impostazione predefinita se SSL non è richiesto e la porta 443 se viene specificato SSL.

  • RpcProxy specifica l'indirizzo e il numero di porta del computer IIS che funge da proxy per il server RPC. È necessario specificare questo valore solo se il processo del server RPC risiede in un computer diverso dal proxy RPC. Se non si specifica un numero di porta, lo stub del client RPC usa per impostazione predefinita la porta 80 se SSL non è specificato e usa la porta 443 se viene specificato SSL (HTTPS).

  • HttpConnectionOption consente facoltativamente di indirizzare il comportamento di RPC quando si effettuano connessioni HTTP. Il valore UseHttpProxy indica a RPC di instradare il traffico attraverso il proxy Http in qualsiasi momento, incluso quando il client ha le opzioni Internet impostate in Internet Explorer su "Bypass proxy server for local addresses".

    Questa opzione è supportata in Windows 7, Windows Server 2008 R2, Windows 8.1 e Windows Server 2012 R2 con KB2916915 installato. Questa opzione non è supportata in Windows 8 e Windows Server 2012. Le applicazioni possono determinare se questa opzione è supportata dal runtime RPC controllando il valore del Registro di sistema ConnectionOptionsFlag presente nella seguente chiave del Registro di sistema:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc

    Se viene impostato il bit 0 (LSB) di questo valore del Registro di sistema, questa opzione specifica è supportata; in caso contrario, questa opzione non è supportata dal runtime RPC nel sistema.

Per altre informazioni sulla creazione di associazioni di stringhe, vedere Binding e handle.

Il programma server RPC può accettare chiamate RPC con tunneling in ascolto sulla sequenza di protocollo ncacn_http.

Microsoft ha due implementazioni principali di RPC su HTTP: versione 1 e versione 2.

La versione 1 (denominata RPC su HTTP v1) è supportata tramite Windows XP. La versione 1 del proxy RPC è supportata tramite Windows 2000.

La versione 2 (denominata RPC su HTTP v2) è la versione corrente.

Le due versioni hanno funzionalità diverse e interoperabilità limitata. Di seguito è riportato un riepilogo delle differenze. Per considerazioni sull'interoperabilità, vedere Requisiti di sistema e interoperabilità per RPC su HTTP.

  • RPC su HTTP v1 richiede l'abilitazione del tunneling SSL in tutti i proxy/firewall HTTP tra rpc su client HTTP e il proxy RPC. RPC su HTTP v1 tenta di creare un tunnel SSL sulla porta 80 anche se i dati inviati non sono effettivamente crittografati ssl. I proxy e i firewall in genere rifiutano tali richieste, a meno che non siano configurati in modo esplicito per consentire tali richieste. RPC su HTTP v2 non ha requisiti di questo tipo.
  • RPC su HTTP v1 non può stabilire una sessione SSL per il proxy RPC. RPC su HTTP v2 può inviare tutto il traffico RPC su HTTP all'interno di una sessione SSL; per impostazione predefinita, la versione 2 richiede che i dati vengano inviati all'interno di una sessione SSL.
  • RPC su HTTP v1 non è in grado di eseguire l'autenticazione nel proxy RPC. RPC su HTTP v2 può eseguire l'autenticazione; per impostazione predefinita, la versione 2 richiede l'autenticazione per il proxy RPC.
  • Il proxy RPC v1 non funziona correttamente quando il computer IIS in cui è installato fa parte di una Web farm. Il proxy RPC v2 funziona correttamente quando il computer IIS in cui è installato fa parte di una Web farm.

Nota

Se Microsoft Internet Explorer è installato nel computer del programma client e il client non specifica un httpProxy nell'associazione di stringhe, lo stub del client RPC cercherà nel registro nel computer client una voce HttpProxy . Se ne trova uno, userà il proxy specificato nella voce del Registro di sistema.

 

Si supponga, ad esempio, che il programma client debba connettersi attraverso Internet a un server RPC in un computer denominato Server7.microsoft.com. Si supponga inoltre che il proxy RPC venga eseguito in Major7.microsoft.com. Il programma server RPC è in ascolto della porta 2225. Il client userà l'associazione di stringhe:

ncacn_http:Server7.microsoft.com[2225, RpcProxy=Major7.microsoft.com]

Se il proxy RPC può risolvere il nome del server come Server7, senza richiedere un nome di dominio completo, è anche possibile specificare:

ncacn_http:Server7 [2225, RpcProxy=Major7.microsoft.com]

Se la rete client usa un firewall e un server proxy Internet denominato myproxy e Internet Explorer nel client non è configurato per l'uso di tale proxy, è necessario modificare l'associazione di stringhe del client in:

ncacn_http:Server7.microsoft.com[,HttpProxy=myproxy:80,RpcProxy=Major7.microsoft.com:80]

In questo modo il client deve connettersi al programma server RPC in Server7.microsoft.com. A tale scopo, il client userà prima la porta 80 (o la porta 443 se viene usato SSL) per connettersi a myproxy. In questo modo il programma client avrà accesso a Internet. Usando Internet, il programma client si connette successivamente al proxy RPC in Major7.microsoft.com. Il proxy RPC stabilirà una connessione al programma server RPC in esecuzione in Server7.microsoft.com.

Se la rete client usa un firewall e se il proxy RPC non può essere raggiunto direttamente, per ottenere una connessione stabilita più velocemente, l'associazione di stringhe client può essere modificata in:

ncacn_http:Server7.microsoft.com[RpcProxy=Major7.microsoft.com:80,HttpConnectionOption=UseHttpProxy]

HttpConnectionOption consente di indirizzare il comportamento di RPC durante l'esecuzione di connessioni HTTP. Il valore UseHttpProxy indica a RPC di instradare il traffico attraverso il proxy Http in qualsiasi momento, incluso quando il client ha le opzioni Internet impostate in Internet Explorer su "Bypass proxy server for local addresses". In questo modo il client deve connettersi forzatamente al proxy RPC tramite il proxy Http. Questo accelera il tempo necessario per stabilire una connessione perché ignora qualsiasi ritardo nella ricerca del server RPC direttamente prima di usare il proxy HTTP.

Se viene usata l'opzione HttpConnectionOption e Internet Explorer nel client non è configurato per l'uso di tale proxy HTTP, le connessioni potrebbero non riuscire con RPC_S_INVALID_NETWORK_OPTIONS.

La maggior parte dei computer attualmente è configurata per l'esplorazione Web. Pertanto, la maggior parte dei client non deve specificare httpProxy, perché verrà recuperata dalle impostazioni di connettività Internet.