Partilhar via


Rotina de Run-down do Contexto do Servidor

Se a comunicação falhar enquanto o servidor está mantendo o contexto em nome do cliente, uma rotina de limpeza pode ser necessária para limpar o estado mantido pelo servidor em nome de um determinado cliente. Essa rotina de limpeza é chamada de rotina de de contexto. Quando uma conexão é interrompida, o stub do servidor e a biblioteca de tempo de execução chamarão essa rotina em cada identificador de contexto aberto pelo cliente.

A rotina de resumo de contexto é necessária, e é implicitamente declarada e nomeada, quando você aplica o atributo [context_handle] a uma definição de tipo. O servidor não chamará a rotina de resumo de contexto se o atributo [context_handle] tiver sido aplicado diretamente a um parâmetro.

A sintaxe de rotina de resumo 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 resumo de contexto de exemplo. que chama o procedimento RemoteClose usado no exemplo em Desenvolvimento de Interface Usando Identificadores de Contexto, Desenvolvimento de Servidor Usando Identificadores de Contextoe Desenvolvimento de Cliente Usando Identificadores de Contexto. Este procedimento fecha o identificador de arquivo, libera a memória associada ao arquivo e atribui NULL ao identificador de contexto. A atribuição de NULL é resultado da chamada da função RemoteClose e não é necessária em um cenário de degradação. O tempo de execução RPC limpa seu estado, independentemente de o identificador de contexto estar 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);
}