Partager via


énumération WS_CALLBACK_MODEL (webservices.h)

Spécifie le comportement de thread d’un rappel (par exemple, un WS_ASYNC_CALLBACK).

Syntax

typedef enum {
  WS_SHORT_CALLBACK = 0,
  WS_LONG_CALLBACK = 1
} WS_CALLBACK_MODEL;

Constantes

 
WS_SHORT_CALLBACK
Valeur : 0
Cette valeur est utilisée pour indiquer qu’un rappel est appelé court.


Lorsqu’un rappel est appelé de façon courte, il doit éviter des calculs longs ou longs
blocage des appels afin qu’il puisse revenir rapidement à l’appelant. Pendant le temps
qu’un rappel est en cours d’exécution courte, d’autres éléments de travail peuvent ne pas être en mesure d’être
mis en file d’attente dans le processus. Cela peut conduire à un blocage de la faim, une
un système qui ne répond pas ou un système sous-utilisé.


S’il est nécessaire d’effectuer des E/S dans un rappel qui a été appelé court, la meilleure pratique est
pour utiliser des E/S asynchrones (au lieu d’E/S synchrones) afin d’éviter de longs appels bloquants.
WS_LONG_CALLBACK
Valeur : 1
Cette valeur est utilisée pour indiquer qu’un rappel est appelé longuement.


Un rappel appelé long n’est pas nécessaire pour revenir rapidement à l’appelant.


Toutefois, les rappels longs étant une ressource limitée, ce n’est pas toujours possible
pour appeler un rappel long.


Avant d’appeler un rappel long, l’appelant doit s’assurer qu’il existe un autre thread
disponible pour le travail de retrait de la file d’attente si nécessaire. Par exemple, si un appelant doit créer
un thread, mais n’est pas en mesure de le faire, puis il doit appeler le rappel court.


Tous les rappels doivent être en mesure de gérer l’appel court et long :

  • Un rappel appelé court, mais qui nécessite une durée, peut l’interpréter comme un
    condition d’erreur, probablement en raison de faibles ressources. Par exemple, en appelant CreateThread ou
    QueueUserWorkItem dans ce cas est également susceptible d’échouer. Si un
    le rappel est nécessaire pour s’exécuter longtemps dans une situation de faible ressource, puis un thread
    à cet effet doit être réservé avant de lancer l’opération asynchrone.

  • Un rappel qui est appelé longuement, mais qui s’attend à ce qu’il soit court peut effectuer son travail normalement.

Remarques

La question de savoir si un rappel sera appelé long ou court est à la charge de l’implémentation de l’appelant. Les implémentations de canal et d’écouteur permettent de contrôler cela pour les rappels asynchrones via les propriétés WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL et WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau | Applications UWP]
En-tête webservices.h