Condividi tramite


Handle di contesto

In alcuni casi, le applicazioni distribuite richiedono al programma server di mantenere le informazioni sullo stato tra le chiamate client. I programmi server che servono più client alla volta devono mantenere le informazioni sullo stato per ogni client. Poiché il client e il server usano spazi indirizzi diversi in computer diversi e non si considerano necessariamente attendibili, gli approcci comuni alla condivisione dei dati spesso non funzionano. Ad esempio, il client e il server non sono in grado di mantenere le informazioni sullo stato nella sessione remota nelle variabili globali perché non condividono lo stesso spazio indirizzi globale. È difficile conservare le informazioni in un file condiviso perché vengono eseguite in computer diversi. Un approccio semplicistico può essere quello di spedire tutto lo stato al client e fare in modo che il client lo restituisca alla chiamata successiva, ma questo approccio presenta difetti: il server non considera necessariamente attendibile il client per restituire lo stato corretto e lo stato potrebbe essere implicitamente associato ad altri stati nel server, ad esempio handle di file o socket aperti.

Microsoft RPC offre un meccanismo potente e sicuro denominato handle di contesto per mantenere lo stato associato a un determinato client in un server. Le informazioni sullo stato sono denominate contesto del server. I client possono ottenere un handle di contesto per identificare il contesto del server per le singole sessioni RPC.

Ad esempio, ogni client in un'applicazione distribuita può creare e aggiornare un file di dati per la sessione RPC. Il server può usare il relativo handle di file per il file di dati di ogni client come handle di contesto. Ogni volta che un client richiede operazioni sul file di dati creato dal server, il client passa l'handle di contesto al server. Il client non ottiene effettivamente l'handle del file stesso; ottiene un token opaco che il tempo di esecuzione RPC del server può associare in modo univoco all'handle di file. Poiché l'handle di contesto è davvero un handle di file, l'handle di contesto ha senso solo nello spazio indirizzi del server. Tuttavia, il programma client può usare l'handle di contesto per indicare al server in quale file eseguire gli aggiornamenti.

Altri dati possono anche essere handle di contesto. Ad esempio, un client e un server possono usare un numero di record di un record di database come handle di file. Se il client deve eseguire diversi aggiornamenti in un determinato record, potrebbe ottenere il numero di record come handle di contesto. Passerebbe il numero di record al server ogni volta che ha richiamato una routine remota per aggiornare il record del database.

Spesso un handle di contesto punta a un blocco di memoria nel server in cui il server mantiene varie informazioni di gestione.

Questa sezione presenta informazioni sulla definizione e l'uso di handle di contesto. La discussione è presentata negli argomenti seguenti: