Compartilhar via


estrutura WS_CHANNEL_DECODER (webservices.h)

Uma estrutura usada para especificar um conjunto de retornos de chamada que podem transformar o tipo de conteúdo e bytes codificados de uma mensagem recebida.

Sintaxe

typedef struct _WS_CHANNEL_DECODER {
  void                                 *createContext;
  WS_CREATE_DECODER_CALLBACK           createDecoderCallback;
  WS_DECODER_GET_CONTENT_TYPE_CALLBACK decoderGetContentTypeCallback;
  WS_DECODER_START_CALLBACK            decoderStartCallback;
  WS_DECODER_DECODE_CALLBACK           decoderDecodeCallback;
  WS_DECODER_END_CALLBACK              decoderEndCallback;
  WS_FREE_DECODER_CALLBACK             freeDecoderCallback;
} WS_CHANNEL_DECODER;

Membros

createContext

Um contexto que será passado para o WS_CREATE_DECODER_CALLBACK.

createDecoderCallback

Um retorno de chamada WS_CREATE_DECODER_CALLBACK que cria uma instância de um decodificador.

decoderGetContentTypeCallback

Um WS_DECODER_GET_CONTENT_TYPE_CALLBACK retorno de chamada que é invocado para obter o tipo de conteúdo da mensagem.

decoderStartCallback

Um retorno de chamada WS_DECODER_START_CALLBACK que é invocado no início da decodificação de uma mensagem.

decoderDecodeCallback

Um retorno de chamada WS_DECODER_DECODE_CALLBACK invocado para decodificar uma mensagem.

decoderEndCallback

Um retorno de chamada WS_DECODER_END_CALLBACK que é invocado no final da decodificação de uma mensagem.

freeDecoderCallback

Um retorno de chamada WS_FREE_DECODER_CALLBACK que libera uma instância de um decodificador.

Comentários

Uma WS_CHANNEL pode desejar descompactar, modificar ou transformar os bytes codificados de uma mensagem assim que forem recebidos. Uma WS_CHANNEL_DECODER fornece os ganchos necessários para interceptar e executar essas modificações.

Ao criar o canal, o WS_CHANNEL_PROPERTY_DECODER deve ser definido com as funções apropriadas.

Os retornos de chamada especificados serão invocados de acordo com a seguinte gramática:


decodercalls := create decoderloop* free
decoderloop  := decodestart
             |  decodestart getcontenttype
             |  decodestart getcontenttype (decode*)
             |  decodestart getcontenttype (decode*) decodeend

O decodificador poderá não ver a sequência de decodificação completa de uma mensagem se o canal ou o decodificador encontrar um erro ao ler a mensagem. Um decodificador deve estar preparado para lidar com a transição para o estado apropriado com base nos retornos de chamada invocados.

Ao usar WS_TCP_CHANNEL_BINDING com WS_CHANNEL_TYPE_SESSION, o tipo de conteúdo é corrigido para o canal. Nesse caso, o WS_DECODER_GET_CONTENT_TYPE_CALLBACK deve retornar exatamente o mesmo valor para o tipo de conteúdo de cada mensagem.

O WS_DECODER_END_CALLBACK não será invocado até que WS_DECODER_DECODE_CALLBACK retorne 0 bytes.

Quando o canal terminar de usar a instância de decodificador, ele o liberará por meio do WS_FREE_DECODER_CALLBACK.

Requisitos

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