Partager via


Routine d’exécution du contexte du serveur

Si la communication se décompose pendant que le serveur conserve le contexte pour le compte du client, une routine de nettoyage peut être nécessaire pour nettoyer 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 requise 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 du contexte 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 suivant présente un exemple de routine d’exécution de contexte. qui appelle la procédure RemoteClose utilisée dans l’exemple dans développement d’interface à l’aide de handles de contexte, développement de serveurs à l’aide de handles de contexteet 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 NULL est le résultat de l’appel de la fonction RemoteClose et n’est pas nécessaire dans un scénario d’exécution. Le temps d’exécution RPC nettoie son état, que le handle de contexte soit défini sur 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);
}