Run-down-Routine für Den Serverkontext

Wenn die Kommunikation unterbricht, während der Server den Kontext im Auftrag des Clients verwaltet, ist möglicherweise eine Bereinigungsroutine erforderlich, um den vom Server verwalteten Zustand im Namen eines bestimmten Clients zu bereinigt. Diese Bereinigungsroutine wird als Kontext-Run-Down-Routine bezeichnet. Wenn eine Verbindung unterbricht, rufen der Serverstub und die Laufzeitbibliothek diese Routine auf jedem kontextbasierten Handle auf, das vom Client geöffnet wird.

Die Run-Down-Routine des Kontexts ist erforderlich und wird implizit deklariert und benannt, wenn Sie das Kontexthandpunktattribut auf [ _ ] eine Typdefinition anwenden. Der Server wird die Run-Down-Routine des Kontexts nicht aufrufen, wenn das [ Context _ Handle-Attribut ] direkt auf einen Parameter angewendet wurde.

Die Routinesyntax für die Kontext run-down ist:

void __RPC_USER type-id_rundown (type-id);

Beachten Sie, dass der Typname den Namen der Kontext-Run-Down-Routine bestimmt.

Das folgende Codefragment stellt eine Beispielkontext-Run-Down-Routine vor. , die die RemoteClose-Prozedur aufruft, die im Beispiel unter Schnittstellenentwicklung mithilfevon Kontexthandles, Serverentwicklung mitKontexthandles und Cliententwicklung mithilfe von Kontexthandles verwendet wird. Diese Prozedur schließt das Dateihand handle, gibt den der Datei zugeordneten Arbeitsspeicher frei und weist dem Kontexthand handle NULL zu. Das Zuweisen von NULL ist das Ergebnis des Aufrufs der RemoteClose-Funktion und in einem Run-Down-Szenario nicht erforderlich. Die RPC-Laufzeit bereinigt ihren Zustand unabhängig davon, ob das Kontexthand handle auf NULL festgelegt ist.

//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);
}