Fonction RpcAsyncCancelCall (rpcasync.h)
Le client appelle la fonction RpcAsyncCancelCall pour annuler un appel asynchrone.
Syntaxe
RPC_STATUS RpcAsyncCancelCall(
PRPC_ASYNC_STATE pAsync,
BOOL fAbort
);
Paramètres
pAsync
Pointeur vers la structure RPC_ASYNC_STATE qui contient des informations d’appel asynchrones.
fAbort
Si la valeur est TRUE, l’appel est annulé immédiatement. Si la valeur est FALSE, attendez que le serveur termine l’appel.
Valeur retournée
Valeur | Signification |
---|---|
|
La demande d’annulation a été traitée. |
|
Le handle asynchrone n’est pas valide. |
Remarques
Il existe deux façons pour un client de demander l’annulation d’un appel asynchrone : abortive et non abortive. Dans une annulation abandonnée (fAbortCall a la valeur TRUE), la fonction RpcAsyncCancelCall envoie une notification d’annulation côté serveur et client et l’appel asynchrone est annulé immédiatement, sans attendre une réponse du serveur. Notez que dans une application multithread, un appel asynchrone ne peut être annulé par le client qu’une fois que le thread à l’origine de l’appel a été retourné avec succès. Cela est nécessaire pour garantir que l’appel ne sera pas annulé de manière asynchrone par un autre thread après son échec synchrone lors de son émission. En général, si un appel asynchrone échoue de manière synchrone, il ne doit pas être annulé de manière asynchrone. L’application cliente doit s’assurer de ce comportement si des appels peuvent être émis et annulés sur différents threads.
Le serveur recherche les demandes d’annulation du client en appelant RpcServerTestCancel. En fonction de l’état de l’appel au moment de l’émission de la demande d’annulation et de la fréquence à laquelle le serveur vérifie les annulations, l’appel peut ou non se terminer normalement. L’application cliente doit appeler RpcAsyncCompleteCall pour terminer l’appel et la valeur de retour indique si l’appel s’est terminé, a échoué ou a été annulé. Toutefois, le client doit toujours attendre la fin de l’appel d’origine avant d’appeler RpcAsyncCompleteCall.
Dans une annulation non abandonnée (fAbortCall a la valeur FALSE), la fonction RpcAsyncCancelCall avertit le serveur de l’annulation et le client attend que le serveur termine l’appel. Il n’existe aucun mécanisme de délai d’expiration intégré. Si vous souhaitez que l’appel expire, le client doit d’abord émettre une annulation non abandonnée à l’aide de son propre mécanisme de délai d’attente. Si l’appel expire, le client peut émettre un annulation avorté.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau | Applications UWP] |
Plateforme cible | Windows |
En-tête | rpcasync.h (inclure Rpc.h) |
Bibliothèque | Rpcrt4.lib |
DLL | Rpcrt4.dll |