Handle di contesto
A volte, le applicazioni distribuite richiedono al programma server di mantenere le informazioni sullo stato tra le chiamate client. I programmi server che servono più di un 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 tra loro, 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 mantenere le informazioni in un file condiviso perché vengono eseguite in computer diversi. Un approccio semplicistico può essere quello di inviare tutto lo stato al client e avere il client restituito nella chiamata successiva, ma questo approccio ha difetti: il server non considera necessariamente attendibile il client per restituire lo stato corretto e lo stato può essere implicitamente collegato ad un altro stato 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 vengono chiamate 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ò avere il programma server creato 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 server RPC run time può associare in modo univoco all'handle di file. Poiché l'handle di contesto è in realtà 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 cui 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 un numero di aggiornamenti in un record specifico, 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 di 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 degli handle di contesto. La discussione viene presentata negli argomenti seguenti:
- Sviluppo dell'interfaccia tramite handle di contesto
- Sviluppo del server tramite handle di contesto
- Sviluppo client tramite handle di contesto
- Routine di esecuzione del contesto del server
- Reimpostazione del contesto client
- Handle di contesto e client multithreading