Beenden der Serveranwendung
Eine Serveranwendung kann die Überwachung auf Clients beenden, indem sie RpcMgmtStopServerListening und RpcServerUnregisterIf aufruft oder einfach den Hostprozess beendet. Beide Methoden sind akzeptabel. Wenn der Server den ersten Ansatz verfolgt, sollten die folgenden Schritte implementiert werden:
Die Serverfunktion RpcServerListen kehrt erst an das aufrufende Programm zurück, wenn eine Ausnahme auftritt oder bis ein Aufruf von RpcMgmtStopServerListening erfolgt. Standardmäßig darf nur ein anderer Serverthread den RPC-Server mithilfe von RpcMgmtStopServerListening anhalten. Clients, die versuchen, den Server anzuhalten, erhalten den Fehler RPC_S_ACCESS_DENIED. Es ist jedoch möglich, RPC so zu konfigurieren, dass einige oder alle Clients den Server beenden können. Weitere Informationen finden Sie unter RpcMgmtStopServerListening .
Sie können auch von der Clientanwendung einen Remoteprozeduraufruf für eine Herunterfahrensroutine auf dem Server durchführen lassen. Die Herunterfahrenroutine ruft RpcMgmtStopServerListening und RpcServerUnregisterIf auf. Diese Tutorialbeispielanwendung verwendet diesen Ansatz, indem sie der Datei Hellop.c die neue Remotefunktion Shutdown hinzufügt.
In der Shutdown-Funktion gibt der einzelne NULL-Parameter für RpcMgmtStopServerListening an, dass die lokale Anwendung das Lauschen auf Remoteprozeduraufrufe beenden soll. Die beiden NULL-Parameter für RpcServerUnregisterIf sind Feldhalter, die angeben, dass alle Schnittstellen die Registrierung aufheben sollten. Der FALSE-Parameter gibt an, dass die Schnittstelle sofort aus der Registrierung entfernt werden soll, anstatt auf den Abschluss ausstehender Aufrufe zu warten.
/* 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