Поделиться через


структура WS_CHANNEL_DECODER (webservices.h)

Структура, используемая для указания набора обратных вызовов, которые могут преобразовывать тип контента и закодированные байты полученного сообщения.

Синтаксис

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;

Члены

createContext

Контекст, который будет передан в WS_CREATE_DECODER_CALLBACK.

createDecoderCallback

Обратный вызов WS_CREATE_DECODER_CALLBACK , который создает экземпляр декодера.

decoderGetContentTypeCallback

Обратный вызов WS_DECODER_GET_CONTENT_TYPE_CALLBACK , который вызывается для получения типа содержимого сообщения.

decoderStartCallback

Обратный вызов WS_DECODER_START_CALLBACK , который вызывается в начале декодирования сообщения.

decoderDecodeCallback

Обратный вызов WS_DECODER_DECODE_CALLBACK , вызываемый для декодирования сообщения.

decoderEndCallback

Обратный вызов WS_DECODER_END_CALLBACK , который вызывается в конце декодирования сообщения.

freeDecoderCallback

Обратный вызов WS_FREE_DECODER_CALLBACK , который освобождает экземпляр декодера.

Комментарии

WS_CHANNEL может захотеть распаковывать, изменять или иным образом преобразовывать закодированные байты сообщения сразу после их получения. WS_CHANNEL_DECODER предоставляет необходимые перехватчики для перехвата и выполнения этих изменений.

При создании канала необходимо задать WS_CHANNEL_PROPERTY_DECODER с соответствующими функциями.

Указанные обратные вызовы будут вызываться в соответствии со следующей грамматикой:


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

Декодер может не видеть полную последовательность декодирования сообщения, если канал или декодер обнаруживает ошибку при чтении сообщения. Декодер должен быть подготовлен к обработке перехода в соответствующее состояние на основе вызываемых обратных вызовов.

При использовании WS_TCP_CHANNEL_BINDING с WS_CHANNEL_TYPE_SESSION тип контента фиксируется для канала. В этом случае WS_DECODER_GET_CONTENT_TYPE_CALLBACK должно возвращать точно такое же значение для типа контента каждого сообщения.

WS_DECODER_END_CALLBACK не будет вызываться, пока WS_DECODER_DECODE_CALLBACK не вернет 0 байт.

После завершения работы канала с помощью экземпляра декодера он освободит его через WS_FREE_DECODER_CALLBACK.

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Верхняя часть webservices.h