Что означает код HRESULT 0xC00E0056 (MQ_ERROR_STALE_HANDLE)?

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

MQ_ERROR_STALE_HANDLE

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

MQ_ERROR_STALE_HANDLE (0xC00E0056) — Служба Message Queuing была перезапущена. Все открытые дескрипторы очередей следует закрыть.

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

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

  • Сопоставьте время создания handle с перезапуском службы Message Queuing: после перезапуска открытые до него дескрипторы должны считаться недействительными.
  • Закройте старые handles и явно откройте очередь заново; простое повторение операции на прежнем значении handle не является восстановлением.
  • Проверьте код reconnect/retry на гонки: один поток не должен продолжать receive/send через handle, который другой поток уже заменил.

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

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

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


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