Udostępnij za pośrednictwem


Procedury uruchamiania kontekstu serwera

Jeśli komunikacja ulega awarii, gdy serwer utrzymuje kontekst w imieniu klienta, może być konieczna rutyna oczyszczania w celu oczyszczenia stanu obsługiwanego przez serwer w imieniu danego klienta. Ta rutyna oczyszczania jest nazywana procedurą uruchamiania kontekstu . W przypadku przerwania połączenia łącznik serwer i biblioteka czasu wykonywania wywoła tę procedurę dla każdego dojścia kontekstu otwartego przez klienta.

Wymagana jest rutyna uruchamiania kontekstu i jest niejawnie zadeklarowana i nazwana po zastosowaniu atrybutu [context_handle] do definicji typu. Serwer nie wywoła procedury uruchamiania kontekstu, jeśli atrybut [context_handle] został zastosowany bezpośrednio do parametru.

Składnia procedury uruchamiania kontekstu to:

void __RPC_USER type-id_rundown (type-id);

Należy pamiętać, że nazwa typu określa nazwę procedury uruchamiania kontekstu.

Poniższy fragment kodu przedstawia procedurę uruchamiania kontekstu przykładowego. wywołuje procedurę RemoteClose używaną w przykładzie w Interface Development Using Context Handles using Context Handles, Server Development Using Context Handlesi Client Development Using Context Handles. Ta procedura zamyka dojście do pliku, zwalnia pamięć skojarzona z plikiem i przypisuje null do uchwytu kontekstowego. Przypisywanie null jest wynikiem wywołania funkcji RemoteClose i nie jest konieczne w scenariuszu uruchamiania. Czas wykonywania RPC czyści jego stan niezależnie od tego, czy dojście kontekstu jest ustawione na 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);
}