| Предыдущий | Следующий |
| 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 сам не создавал гонку.
Как подтвердить исправление
Повторяйте исходный сценарий с новым корректно открытым объектом и отдельно проверяйте конкурентный путь. Простое исчезновение ошибки после перезапуска службы не доказывает устранение гонки или ошибки времени жизни.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.