Что означает код HRESULT 0xC00E005A (MQ_ERROR_QUEUE_DELETED)?

 
Предыдущий Следующий
MQ_ERROR_TRANSACTION_ENLIST MQ_ERROR_ILLEGAL_CONTEXT

MQ_ERROR_QUEUE_DELETED

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

MQ_ERROR_QUEUE_DELETED (0xC00E005A) — Очередь удалена. Получать сообщения через этот дескриптор больше нельзя; дескриптор следует закрыть.

Дескриптор MSMQ относится к конкретному времени жизни очереди и локальной службы Queue Manager. Удаление/пересоздание очереди или перезапуск MSMQ не «оживляют» старый handle, даже если имя пути после этого выглядит тем же.

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

  • Проверьте, когда был открыт handle и когда очередь была удалена или пересоздана. Старый handle следует закрыть независимо от совпадения нового имя пути.
  • Если приложение автоматически создаёт очередь заново, сравните instance/имя формата нового объекта и решите, допустимо ли продолжать работу уже с новой очередью.
  • Для асинхронного receive согласуйте закрытие handle с владельцем callback или транзакции, чтобы cleanup сам не создавал гонку.

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

Повторяйте исходный сценарий с новым корректно открытым объектом и отдельно проверяйте конкурентный путь. Простое исчезновение ошибки после перезапуска службы не доказывает устранение гонки или ошибки времени жизни.

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


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