Arrêt de l’application serveur
Une application serveur peut cesser d’écouter les clients en appelant RpcMgmtStopServerListening et RpcServerUnregisterIf, ou simplement en quittant le processus hôte. Les deux méthodes sont acceptables. Si le serveur suit la première approche, il doit implémenter les étapes suivantes :
La fonction serveur RpcServerListen ne retourne pas au programme appelant tant qu’une exception ne se produit pas ou qu’un appel à RpcMgmtStopServerListening se produit. Par défaut, seul un autre thread de serveur est autorisé à arrêter le serveur RPC à l’aide de RpcMgmtStopServerListening. Les clients qui tentent d’arrêter le serveur recevront l’erreur RPC_S_ACCESS_DENIED. Toutefois, il est possible de configurer RPC pour autoriser certains ou tous les clients à arrêter le serveur. Pour plus d’informations, consultez RpcMgmtStopServerListening .
Vous pouvez également demander à l’application cliente d’effectuer un appel de procédure distante à une routine d’arrêt sur le serveur. La routine d’arrêt appelle RpcMgmtStopServerListening et RpcServerUnregisterIf. Cet exemple d’application de programme de tutoriel utilise cette approche en ajoutant une nouvelle fonction distante, Shutdown, au fichier Hellop.c.
Dans la fonction Shutdown , le paramètre null unique de RpcMgmtStopServerListening indique que l’application locale doit cesser d’écouter les appels de procédure distante. Les deux paramètres Null de RpcServerUnregisterIf sont des caractères génériques, ce qui indique que toutes les interfaces doivent être désinscrits. Le paramètre FALSE indique que l’interface doit être supprimée immédiatement du Registre, plutôt que d’attendre la fin des appels en attente.
/* 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