Routine d’exécution du contexte du serveur
Si la communication tombe en panne pendant que le serveur gère le contexte pour le compte du client, une routine de nettoyage peut être nécessaire pour propre l’état géré par le serveur pour le compte d’un client donné. Cette routine de nettoyage est appelée routine d’exécution de contexte. Lorsqu’une connexion s’arrête, le stub du serveur et la bibliothèque d’exécution appellent cette routine sur chaque handle de contexte ouvert par le client.
La routine d’exécution du contexte est obligatoire et est implicitement déclarée et nommée lorsque vous appliquez l’attribut [context_handle] à une définition de type. Le serveur n’appelle pas la routine d’exécution du contexte si l’attribut [context_handle] a été appliqué directement à un paramètre.
La syntaxe de routine d’exécution contextuelle est la suivante :
void __RPC_USER type-id_rundown (type-id);
Notez que le nom du type détermine le nom de la routine d’exécution du contexte.
Le fragment de code qui suit présente un exemple de routine d’exécution de contexte. qui appelle la procédure RemoteClose utilisée dans l’exemple développement d’interface à l’aide de handles de contexte, développement serveur à l’aide de handles de contexte et développement client à l’aide de handles de contexte. Cette procédure ferme le handle de fichier, libère la mémoire associée au fichier et affecte NULL au handle de contexte. L’affectation de la valeur NULL est le résultat de l’appel de la fonction RemoteClose et n’est pas nécessaire dans un scénario d’arrêt. Le temps d’exécution RPC nettoie son état, que le handle de contexte ait ou non la valeur 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);
}