| Предыдущий | Следующий |
| MQ_ERROR_IO_TIMEOUT | MQ_ERROR_MESSAGE_ALREADY_RECEIVED |
MQ_ERROR_ILLEGAL_CURSOR_ACTION
Что означает MQ_ERROR_ILLEGAL_CURSOR_ACTION
MQ_ERROR_ILLEGAL_CURSOR_ACTION — Запрошенное действие получения сообщения недопустимо для текущей позиции курсора. Например, MQ_ACTION_PEEK_NEXT нельзя применить, если курсор уже находится в конце очереди.
Cursor в MSMQ хранит позицию при просмотре сообщений очереди. Действия peek current/peek next зависят от того, где находится курсор; поэтому ошибка относится к последовательности навигации по очереди, а не к недопустимому указателю памяти или повреждению сообщения.
Что проверить
- Логируйте действие receive/peek и позицию курсора перед вызовом. Особое внимание — переходу после последнего доступного сообщения.
- Не вызывайте MQ_ACTION_PEEK_NEXT, если курсор ещё не установлен на допустимое текущее сообщение или уже дошёл до конца очереди.
- При параллельных потребителях учитывайте удаление сообщений между peek-вызовами: состояние очереди может измениться независимо от локальной позиции cursor.
Как подтвердить исправление
После исправления последовательность peek current/next должна корректно обходить очередь и отдельно обрабатывать достижение конца без повторения недопустимого действия.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
