Freigeben über


WS_CALLBACK_MODEL-Enumeration (webservices.h)

Gibt das Threadingverhalten eines Rückrufs an (z. B. eine WS_ASYNC_CALLBACK).

Syntax

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

Konstanten

 
WS_SHORT_CALLBACK
Wert: 0
Dieser Wert wird verwendet, um anzugeben, dass ein Rückruf kurz aufgerufen wird.


Wenn ein Rückruf kurz aufgerufen wird, sollten langwierige Berechnungen oder lange Berechnungen vermieden werden.
Blockiert Anrufe, damit er schnell zum Aufrufer zurückkehren kann. Während der Zeit
dass ein Rückruf kurz ausgeführt wird, können andere Arbeitselemente möglicherweise nicht sein.
innerhalb des Prozesses entfernt. Dies kann zu einem Hunger-Deadlock führen,
nicht reagierendes System oder ein nicht ausgelastetes System.


Wenn E/A innerhalb eines Kurzaufrufs ausgeführt werden muss, ist die bewährte Methode
, um asynchrone E/A (anstelle synchroner E/A)-Vorgänge zu verwenden, um langwierige Blockieren von Aufrufen zu vermeiden.
WS_LONG_CALLBACK
Wert: 1
Dieser Wert wird verwendet, um anzugeben, dass ein Rückruf lang aufgerufen wird.


Ein lang aufgerufener Rückruf ist nicht erforderlich, um schnell zum Aufrufer zurückzukehren.


Lange Rückrufe sind jedoch eine begrenzte Ressource, sodass dies nicht immer möglich ist.
, um einen Rückruf long aufzurufen.


Bevor er einen Rückruf long aufruft, muss der Aufrufer sicherstellen, dass ein anderer Thread vorhanden ist.
verfügbar, um nach Bedarf arbeiten zu können. Beispiel: Wenn ein Aufrufer erstellen muss
Ein Thread kann aber nicht, dann muss der Rückruf short aufgerufen werden.


Alle Rückrufe müssen in der Lage sein, sowohl kurz als auch lang aufgerufen zu werden:

  • Ein Rückruf, der kurz aufgerufen wird, aber long erfordert, kann dies als ein
    Fehlerbedingung, wahrscheinlich aufgrund geringer Ressourcen. Beispiel: Aufrufen von CreateThread oder
    QueueUserWorkItem schlägt in dieser Situation wahrscheinlich ebenfalls fehl. Wenn ein
    Rückruf ist erforderlich, um in einer ressourcenarmen Situation lange auszuführen, und dann ein Thread
    zu diesem Zweck muss vor dem Initiieren des asynchronen Vorgangs reserviert werden.

  • Ein Rückruf, der lang aufgerufen wird, aber eine Kurze erwartet, kann seine Arbeit normal erledigen.

Hinweise

Ob ein Rückruf lang oder kurz aufgerufen wird, hängt von der Aufruferimplementierung ab. Die Kanal- und Listenerimplementierungen bieten eine Möglichkeit, dies für asynchrone Rückrufe über die Eigenschaften WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL und WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL zu steuern.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2 [Desktop-Apps | UWP-Apps]
Kopfzeile webservices.h