Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om kommunikationen bryts medan servern underhåller kontexten för klientens räkning, kan en rensningsrutin behövas för att rensa upp tillståndet som underhålls av servern för en viss klients räkning. Den här rensningsrutinen kallas för en kontextrutin. När en anslutning bryts anropar servern stub och körningsbiblioteket den här rutinen för varje kontextreferens som öppnas av klienten.
Körningsrutinen för kontext krävs och deklareras implicit och namnges när du tillämpar attributet [context_handle] på en typdefinition. Servern anropar inte körningsrutinen för kontext om attributet [context_handle] tillämpades direkt på en parameter.
Syntaxen för nedkörning av kontext är:
void __RPC_USER type-id_rundown (type-id);
Observera att typnamnet bestämmer namnet på körningsrutinen för kontexten.
Kodfragmentet som följer visar en exempelkontextkörningsrutin. som anropar remoteclose-proceduren som används i exemplet i Interface Development using Context Handles, Server Development Using Context Handlesoch Client Development Using Context Handles. Den här proceduren stänger filhandtaget, frigör det minne som är associerat med filen och tilldelar NULL- till kontexthandtaget. Att tilldela NULL- är ett resultat av att anropa funktionen RemoteClose och är inte nödvändigt i ett nedkört scenario. RPC-körningstiden rensar dess tillstånd oavsett om kontextreferensen är inställd på 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);
}