Condividi tramite


Gestione dello stato nel server tra chiamate

Spesso è necessario mantenere lo stato nel server tra chiamate RPC separate, usando handle di contesto è il modo migliore per farlo. Alcune parole su come i handle del contesto operano internamente aiutano a comprendere quando il contesto gestisce meglio il funzionamento.

Il client non riceve mai lo stato mantenuto sul server. Più spesso lo stato del server è un puntatore a un blocco di memoria e il client non ha informazioni su di esso. Tutti i client ricevono un numero univoco elevato, con altre informazioni associate a esso, che il server invia al client e che rappresenta l'handle di contesto in tutte le operazioni successive. Ogni volta che il client fa riferimento a un handle aperto, invia il numero elevato ricevuto dal server quando tale handle di contesto è stato aperto.

Il server tiene traccia di tutti i numeri di grandi dimensioni inviati a un client. Quando il server riceve un numero elevato che rappresenta un handle di contesto, cerca il numero nella raccolta di handle di contesto validi e in sospeso per tale client e trova il contesto lato server corrispondente a un determinato numero elevato. Questa operazione viene passata alla routine del server. Se il numero elevato non viene trovato, viene generata un'eccezione RPC_X_SS_CONTEXT_MISMATCH e propagata al client.

Le corollarie di questo design sono le seguenti:

  • Un handle di contesto è valido solo nel contesto della sessione client/server esistente. Non può essere passato a un altro client.
  • Un handle di contesto diventa non valido se il server viene riavviato o in caso contrario perde la connessione al client.
  • Il client non può interpretare l'handle di contesto rappresentato nel server. Per un client, tutti gli handle di contesto sono semplicemente numeri grandi.

Se il client ha esito negativo, il server riceverà una notifica e eseguirà la pulizia dei relativi handle di contesto usando il meccanismo di run-down.