Compartilhar via


enumeração WS_CALLBACK_MODEL (webservices.h)

Especifica o comportamento de threading de um retorno de chamada (por exemplo, um WS_ASYNC_CALLBACK).

Syntax

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

Constantes

 
WS_SHORT_CALLBACK
Valor: 0
Esse valor é usado para indicar que um retorno de chamada é invocado como curto.


Quando um retorno de chamada é invocado como curto, ele deve evitar computação longa ou longa
bloquear chamadas para que ele possa retornar ao chamador rapidamente. Durante o tempo
que um retorno de chamada está executando curto, outros itens de trabalho podem não ser capazes de ser
desempedido dentro do processo. Isso pode levar a um deadlock de fome, um
sistema sem resposta ou um sistema subutilizado.


Se for necessário fazer E/S dentro de um retorno de chamada que foi invocado curto, a melhor prática é
para usar E/S assíncrona (em vez de E/S síncrona), para evitar chamadas de bloqueio longas.
WS_LONG_CALLBACK
Valor: 1
Esse valor é usado para indicar que um retorno de chamada é invocado por muito tempo.


Um retorno de chamada chamado long não é necessário para retornar ao chamador rapidamente.


No entanto, retornos de chamada longos são um recurso limitado, portanto, nem sempre é possível
para invocar um retorno de chamada longo.


Antes de invocar um retorno de chamada longo, o chamador deve garantir que haja outro thread
disponível para remover o trabalho conforme necessário. Por exemplo, se um chamador precisar criar
um thread, mas não é possível, então ele deve invocar o retorno de chamada curto.


Todos os retornos de chamada devem ser capazes de lidar com a invocação curta, bem como com o tempo:

  • Um retorno de chamada que é invocado curto, mas requer long pode interpretar isso como um
    condição de erro, provavelmente devido a recursos baixos. Por exemplo, chamando CreateThread ou
    QueueUserWorkItem nessa situação também provavelmente falhará. Se um
    o retorno de chamada é necessário para ser executado por muito tempo em uma situação de pouco recurso e, em seguida, um thread
    para essa finalidade deve ser reservado antes de iniciar a operação assíncrona.

  • Um retorno de chamada que é invocado por muito tempo, mas espera que short possa continuar seu trabalho normalmente.

Comentários

Se um retorno de chamada será invocado longo ou curto, depende da implementação do chamador. As implementações de canal e ouvinte fornecem uma maneira de controlar isso para retornos de chamada assíncronos por meio das propriedades WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL e WS_LISTENER_PROPERTY_ASYNC_CALLBACK_MODEL .

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 R2 [aplicativos da área de trabalho | Aplicativos UWP]
Cabeçalho webservices.h