Что означает код HRESULT 0x80110602 (COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE)?

 
Предыдущий Следующий
COMQC_E_NO_QUEUEABLE_INTERFACES COMQC_E_NO_IPERSISTSTREAM

COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE

COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: граница сбоя, проверка и исправление

COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE имеет значение 0x80110602 (-2146367998 в знаковом 32-битном представлении). Для операции требуется MSMQ, но эта служба не установлена.

Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE старший бит HRESULT делает значение ошибкой. Константа COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE объявлена в winerror.h и относится к области «очереди компонентов COM+».

Почему важен контекст вызова

Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE код относится к COM+ Queued Components. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE здесь важны доступность MSMQ, пригодность интерфейса для очереди, сериализуемость вызова и доверие к отправителю; успешная запись сообщения в очередь ещё не доказывает успешное выполнение серверного компонента.

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

В имени COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE закодированы ориентиры для расследования: COMQC — технический признак «comqc»; QUEUING — технический признак «queuing»; SERVICE — служба; NOT — отсутствие требуемого условия; AVAILABLE — доступность ресурса. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE эти ориентиры задают конкретный предмет проверки, но не заменяют контракт вызвавшего API.

Интерпретация HRESULT: признаки в имени константы

Компонент имени COMQC уточняет смысл COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: речь идёт про технический признак «comqc». Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE эту границу следует воспроизвести отдельно от последующей обработки ошибки.

Маркер QUEUING в COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE направляет проверку на технический признак «queuing». Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE сопоставьте этот признак с фактическими параметрами первого неуспешного вызова.

Компонент имени SERVICE уточняет смысл COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: речь идёт про служба. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE эту границу следует воспроизвести отдельно от последующей обработки ошибки.

При разборе COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE обозначение NOT связывает код с темой «отсутствие требуемого условия». До повторной проверки COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE сохраните входные данные без нормализации.

Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE в техническом контексте особенно важны: транзакция, провайдер. При расследовании COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE их следует проверять как связанные части одной операции, а не как независимые симптомы.

Минимальный набор свидетельств

  • В первичном журнале по COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE нужно сохранить имя очереди, Message ID и Correlation ID.
  • На границе сбоя по COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE нужно записать интерфейс, IID и вызываемый метод queued-компонента.
  • Для сравнения с исправным случаем по COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE нужно проверить состояние MSMQ, права очереди и учётную запись слушателя.
  • До повторной попытки по COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE нужно сохранить тело и свойства проблемного сообщения до его перемещения.
  • Для воспроизводимого отчёта по COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE нужно зафиксировать AppID COM+ приложения и параметры Queuing Enabled/Listen.

Как локализовать причину

  1. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: Проверить, что интерфейс отмечен как queueable и параметры метода допускают маршалинг; отдельно отметьте изменение состояния объекта.
  2. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: Проверить создание и доступность очереди приложения COM+; все остальные условия оставьте неизменными.
  3. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: Сопоставить отправителя сообщения с политикой аутентификации и доверия; не удаляйте исходные данные до завершения сравнения.
  4. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: Повторить вызов с минимальным набором параметров и проследить Message ID до получателя; повторите шаг на исправном контрольном примере.
  5. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE: Подтвердить не только удаление сообщения из очереди, но и завершение серверной транзакции; сохраните первый hresult и точное время результата.

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

Корректирующее действие для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE должно устранять условие «Для операции требуется MSMQ, но эта служба не установлена» на уровне транзакция. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE простое подавление HRESULT, бесконечный повтор или очистка всех настроек не доказывают восстановление контракта.

Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE зафиксируйте результат до и после изменения одними и теми же средствами. Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE сравнивайте не только HRESULT, но и конечное состояние объекта, побочные эффекты и события подсистемы.

Проверка зависимости от MSMQ

COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE возвращается до нормальной обработки queued-вызова, когда COM+ не может использовать Microsoft Message Queuing. Причиной может быть отсутствие компонента MSMQ, остановленная служба или недоступная локальная очередь приложения.

Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE сначала подтвердите установку и запуск MSMQ, затем проверьте создание очередей COM+ и права учётной записи слушателя. Повторная регистрация queued-интерфейса не заменяет восстановление самой службы очередей.

  • Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE сохраните состояние службы MSMQ и события её запуска.
  • Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE проверьте доступность private queue приложения.
  • Для COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE отправьте контрольное сообщение напрямую через MSMQ.

Полезные материалы


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