Condividi tramite


Handle di associazione impliciti

Gli handle di associazione impliciti consentono all'applicazione di selezionare un server specifico per eseguire le chiamate di routine remote. Per informazioni dettagliate, vedere Associazione lato client. Abilitano anche il programma client/server per l'uso di associazioni autenticate. Vale a dire, il client può specificare le informazioni di autenticazione in un handle di associazione implicito. La libreria di runtime RPC usa le informazioni di autenticazione per stabilire una sessione RPC autenticata tra il client e il server. Per altre informazioni, vedere Sicurezza.

Nota

Gli handle di associazione impliciti non sono thread safe. Le applicazioni multi-thread devono quindi evitare di usare handle di associazione impliciti.

 

Quando l'applicazione usa associazioni implicite, il client deve impostare le informazioni di associazione in modo che possa creare l'associazione. Dopo che il client crea un'associazione implicita, non è necessario passare gli handle di associazione a procedure remote. La libreria RPC gestisce il resto della meccanica della sessione di comunicazione.

Il client archivia le informazioni di associazione per un handle implicito in una variabile globale. Quando il compilatore MIDL genera lo stub del client e il file di intestazione dalla specifica dell'interfaccia nel file MIDL, genera anche codice per una variabile di handle di associazione globale. Il programma client inizializza l'handle e quindi non fa riferimento nuovamente fino a quando non elimina l'associazione.

Si crea un handle implicito specificando l'attributo [implicit_handle] nell'ACF per un'interfaccia come indicato di seguito:

/* ACF file (complete) */
 
[
  implicit_handle(handle_t hHello)
]
interface hello
{
}

Il tipo handle_t , usato nell'esempio precedente, è un tipo di dati MIDL usato per definire handle di associazione.

Dopo aver creato l'handle implicito, l'applicazione deve usarla come parametro per le funzioni della libreria di runtime RPC. Non usare l'handle implicito come parametro per le chiamate di routine remote. L'esempio di codice seguente illustra l'uso di handle di associazione impliciti.

RPC_STATUS status;
status = RpcBindingFromStringBinding(
            pszStringBinding,
            &hHello);
 
status = MyRemoteProcedure();
 
status = RpcBindingFree(hHello);
...

Nell'esempio precedente, le funzioni della libreria di runtime RPC RpcBindingFromStringBinding e RpcBindingFree richiedono il passaggio dell'handle di associazione implicito negli elenchi di parametri. Tuttavia, la procedura remota MyRemoteProcedure non è stata eseguita, poiché non è una funzione di libreria di runtime RPC.