Что означает код HRESULT 0xC00E001A (MQ_ERROR_BUFFER_OVERFLOW)?

 
Предыдущий Следующий
MQ_ERROR_ILLEGAL_PROPERTY_VT MQ_ERROR_IO_TIMEOUT

MQ_ERROR_BUFFER_OVERFLOW

Что означает MQ_ERROR_BUFFER_OVERFLOW

MQ_ERROR_BUFFER_OVERFLOW — Буфер свойства Message Queuing слишком мал для всех данных, возвращаемых операцией. Для тела сообщения требуемый размер можно определить по PROPID_M_BODY_SIZE.

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

Что проверить

  • Запишите размер выделенного буфера и возвращённый размер свойства. Для тела сообщения используйте значение PROPID_M_BODY_SIZE.
  • Повторите получение после увеличения буфера, не изменяя cursor, action и остальные условия чтения, иначе вы будете сравнивать уже другую операцию.
  • При конкурирующих получателях учитывайте, что сообщение может исчезнуть между попытками; обработайте это отдельно от ошибки размера.

Как подтвердить исправление

Проверка должна включать сообщение, которое заведомо не помещается в первоначальный буфер: после корректного перераспределения оно читается полностью без обрезки и без изменения его содержимого.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.