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


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

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

Синтаксис

typedef struct _WS_CHANNEL_ENCODER {
  void                                 *createContext;
  WS_CREATE_ENCODER_CALLBACK           createEncoderCallback;
  WS_ENCODER_GET_CONTENT_TYPE_CALLBACK encoderGetContentTypeCallback;
  WS_ENCODER_START_CALLBACK            encoderStartCallback;
  WS_ENCODER_ENCODE_CALLBACK           encoderEncodeCallback;
  WS_ENCODER_END_CALLBACK              encoderEndCallback;
  WS_FREE_ENCODER_CALLBACK             freeEncoderCallback;
} WS_CHANNEL_ENCODER;

Члены

createContext

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

createEncoderCallback

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

encoderGetContentTypeCallback

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

encoderStartCallback

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

encoderEncodeCallback

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

encoderEndCallback

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

freeEncoderCallback

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

Комментарии

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

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

Грамматика для обратных вызовов кодировщика:


encodercalls := create encoderloop* free
encoderloop  := getcontenttype
             |  getcontenttype encodestart
             |  getcontenttype encodestart (encode*)
             |  getcontenttype encodestart (encode*) encodeend

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

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

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

Требования

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