Udostępnij przez


Zatrzymywanie aplikacji serwera

Aplikacja serwera może przestać nasłuchiwać klientów, wywołując RpcMgmtStopServerListening i RpcServerUnregisterIflub po prostu zamykając proces hostujący. Obie metody są dopuszczalne. Jeśli serwer jest zgodny z pierwszym podejściem, należy zaimplementować następujące kroki:

Funkcja serwera RpcServerListen nie powraca do programu wywołującego, dopóki nie wystąpi wyjątek lub dopóki nie wystąpi wywołanie RpcMgmtStopServerListening. Domyślnie tylko inny wątek serwera może zatrzymać serwer RPC przy użyciu RpcMgmtStopServerListening. Klienci, którzy próbują zatrzymać serwer, otrzymają błąd RPC_S_ACCESS_DENIED. Można jednak skonfigurować RPC, aby umożliwić niektórym lub wszystkim klientom zatrzymanie serwera. Aby uzyskać szczegółowe informacje, zobacz RpcMgmtStopServerListening.

Możesz także zlecić aplikacji klienckiej wykonanie zdalnego wywołania procedury zamknięcia na serwerze. Procedura zamykania wywołuje RpcMgmtStopServerListening i RpcServerUnregisterIf. W tym samouczku przykładowa aplikacja programowa używa tego podejścia przez dodanie nowej funkcji zdalnej, Shutdown, do pliku Hellop.c.

W funkcji Shutdown pojedynczy parametr o wartości zerowej do RpcMgmtStopServerListening wskazuje, że aplikacja lokalna powinna zaprzestać nasłuchiwać zdalnych wywołań procedur. Dwa parametry o wartości null do RpcServerUnregisterIf są symbolami wieloznacznymi wskazującymi, że wszystkie interfejsy powinny być wyrejestrowane. Parametr FALSE wskazuje, że interfejs powinien zostać natychmiast usunięty z rejestru, zamiast czekać na ukończenie oczekujących wywołań.

/* add this function to hellop.c */
void Shutdown(void)
{
    RPC_STATUS status;
 
    status = RpcMgmtStopServerListening(NULL);
 
    if (status) 
    {
       exit(status);
    }
 
    status = RpcServerUnregisterIf(NULL, NULL, FALSE);
 
    if (status) 
    {
       exit(status);
    }
} //end Shutdown