Rotina de execução de contexto do servidor
Se a comunicação for interrompida enquanto o servidor estiver mantendo o contexto em nome do cliente, uma rotina de limpeza poderá ser necessária para limpar o estado mantido pelo servidor em nome de um determinado cliente. Essa rotina de limpeza é chamada de rotina de execução de contexto . Quando uma conexão for interrompida, o stub do servidor e a biblioteca em tempo de execução chamarão essa rotina em cada identificador de contexto aberto pelo cliente.
A rotina de execução de contexto é necessária e é declarada implicitamente e nomeada quando você aplica o atributo [context_handle] a uma definição de tipo. O servidor não chamará a rotina de run-down de contexto se o atributo [context_handle] tiver sido aplicado diretamente a um parâmetro.
A sintaxe de rotina de execução de contexto é:
void __RPC_USER type-id_rundown (type-id);
Observe que o nome do tipo determina o nome da rotina de execução de contexto.
O fragmento de código a seguir apresenta uma rotina de run-down de contexto de exemplo. que chama o procedimento RemoteClose usado no exemplo no desenvolvimento de interface de usando identificadores de contexto, desenvolvimento de servidor usando identificadores de contextoe desenvolvimento de cliente usando identificadores de contexto. Esse procedimento fecha o identificador de arquivo, libera a memória associada ao arquivo e atribui NULL ao identificador de contexto. Atribuir NULL é resultado da chamada da função RemoteClose e não é necessário em um cenário de execução. O tempo de execução do RPC limpa seu estado independentemente de o identificador de contexto ser definido como 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);
}