Freigeben über


Ausführungsroutine für Serverkontext

Wenn die Kommunikation unterbrochen wird, während der Server den Kontext im Auftrag des Clients verwaltet, kann eine Bereinigungsroutine erforderlich sein, um den Zustand zu bereinigen, der vom Server im Auftrag eines bestimmten Clients verwaltet wird. Diese Bereinigungsroutine wird als Kontextablaufroutinebezeichnet. Wenn eine Verbindung unterbrochen wird, ruft der Server-Stub und die Laufzeitbibliothek diese Routine für jedes kontextbezogene Handle auf, das vom Client geöffnet wird.

Die Kontextausführungsroutine ist erforderlich und wird implizit deklariert und benannt, wenn Sie das Attribut [context_handle] auf eine Typdefinition anwenden. Der Server ruft die Ausführungsroutine für den Kontext nicht auf, wenn das Attribut [context_handle] direkt auf einen Parameter angewendet wurde.

Die Kontextausführungsroutinesyntax lautet:

void __RPC_USER type-id_rundown (type-id);

Beachten Sie, dass der Typname den Namen der Kontextausführungsroutine bestimmt.

Das folgende Codefragment stellt eine Beispielkontextausführungsroutine dar. die im Beispiel in Interface Development Using Context Handles, Server Development Using Context Handlesund Client Development Using Context Handlesaufgerufen. Diese Prozedur schließt das Dateihandle, gibt den Speicher frei, der der Datei zugeordnet ist, und weist NULL- dem Kontexthandle zu. Das Zuweisen NULL- ist ein Ergebnis des Aufrufs der RemoteClose-Funktion und ist in einem Ausführungsszenario nicht erforderlich. Die RPC-Laufzeit bereinigt ihren Zustand, unabhängig davon, ob das Kontexthandle 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);
}