Routine di esecuzione del contesto del server

Se la comunicazione si interrompe mentre il server mantiene il contesto per conto del client, potrebbe essere necessaria una routine di pulizia per pulire lo stato gestito dal server per conto di un determinato client. Questa routine di pulizia è detta routine di esecuzione del contesto. Quando una connessione si interrompe, lo stub del server e la libreria di runtime chiameranno questa routine in ogni handle di contesto aperto dal client.

La routine di esecuzione del contesto è obbligatoria e viene dichiarata e denominata in modo implicito quando si applica l'attributo [context_handle] a una definizione di tipo. Il server non chiamerà la routine di esecuzione del contesto se l'attributo [context_handle] è stato applicato direttamente a un parametro.

La sintassi della routine di esecuzione del contesto è:

void __RPC_USER type-id_rundown (type-id);

Si noti che il nome del tipo determina il nome della routine di esecuzione del contesto.

Il frammento di codice seguente presenta una routine di esecuzione del contesto di esempio. che chiama la routine RemoteClose utilizzata nell'esempio in Sviluppo di interfacce tramite handle di contesto, sviluppo del server tramite handle di contesto e sviluppo client tramite handle di contesto. Questa procedura chiude l'handle di file, libera la memoria associata al file e assegna NULL all'handle di contesto. L'assegnazione di NULL è il risultato della chiamata alla funzione RemoteClose e non è necessaria in uno scenario di run-down. Il runtime RPC pulisce lo stato indipendentemente dal fatto che l'handle di contesto sia impostato su NULL.

//file: cxhndp.c (fragment of file containing remote procedures)
//The rundown routine is associated with the context handle type.  
void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown(
    PCONTEXT_HANDLE_TYPE phContext)
{
    printf("Client died with an open file, closing it..\n");
    RemoteClose(&phContext);
    assert(phContext == 0);
}