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