Arresto dell'applicazione server
Un'applicazione server può arrestare l'ascolto dei client chiamando RpcMgmtStopServerListening e RpcServerUnregisterIf oppure semplicemente chiudendo il processo host. Entrambi i metodi sono accettabili. Se il server segue il primo approccio, deve implementare i passaggi seguenti:
La funzione server RpcServerListen non torna al programma chiamante finché non si verifica un'eccezione o finché non si verifica una chiamata a RpcMgmtStopServerListening . Per impostazione predefinita, solo un altro thread server può arrestare il server RPC usando RpcMgmtStopServerListening. I client che tentano di arrestare il server riceveranno l'errore RPC_S_ACCESS_DENIED. Tuttavia, è possibile configurare RPC per consentire ad alcuni o a tutti i client di arrestare il server. Per informazioni dettagliate, vedere RpcMgmtStopServerListening .
È anche possibile che l'applicazione client faccia una chiamata di procedura remota a una routine di arresto nel server. La routine di arresto chiama RpcMgmtStopServerListening e RpcServerUnregisterIf. Questa applicazione di programma di esempio di esercitazione usa questo approccio aggiungendo una nuova funzione remota, Arresta, al file Hellop.c.
Nella funzione Shutdown il singolo parametro Null in RpcMgmtStopServerListening indica che l'applicazione locale deve interrompere l'ascolto delle chiamate di routine remote. I due parametri Null in RpcServerUnregisterIf sono caratteri jolly, che indicano che tutte le interfacce devono essere annullate. Il parametro FALSE indica che l'interfaccia deve essere rimossa immediatamente dal Registro di sistema anziché attendere il completamento delle chiamate in sospeso.
/* 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