| Предыдущий | Следующий |
| TAPI_E_NOTSUPPORTED | TAPI_E_INVALIDMEDIATYPE |
OLE_E_NOCONNECTION
Неизвестный идентификатор OLE advisory connection
это HRESULT 2147745796 (0x80040004) из winerror.h. AllStat описывает его как «Для этого connection ID соединение отсутствует». Результат относится к Unadvise или управлению существующим OLE advise connection. Эта константа полезен только вместе с методом и фазой жизненного цикла, где переданный cookie не идентифицирует активное advisory connection этого объекта.
Решающее значение OLE_E_NOCONNECTION состоит в том, что переданный connection cookie не идентифицирует активное advisory connection этого объекта. для этого результата, бит severity сам по себе не определяет обработку; решающий факт — переданный cookie не соответствует активному advisory connection этого объекта. Надёжная диагностика этого результата сохраняет исходное значение и восстанавливает состояние, при котором это стало истинно.
Где появляется результат
- Этот HRESULT может возникать в контейнерах compound document, встроенных и связанных объектах, при OLE-активации, advising, кэшировании, преобразовании и сохранении.
- Привяжите сбой к одной конкретной операции среди IOleObject, IOleLink, IOleCache, IAdviseSink, IPersistStorage, IOleInPlaceObject, moniker, verb и callback client site.
- Сохраните CLSID, идентичность объекта и client site, storage или moniker, cookie advise, verb, состояние активации, поколение окна и формат представления до освобождения или замены объекта, вернувшего этот HRESULT.
Запись об инциденте для этого результата должна различать вызывающий код, runtime, поставщика и базовый ресурс, проверяя, что переданный cookie действительно не соответствует активному advisory connection объекта.
Типичные причины и граница интерпретации
Непосредственная граница контракта конкретна: переданный connection cookie не идентифицирует активное advisory connection этого объекта. Типичные ветви причин:
- Cookie принадлежит другому объекту.
- Connection уже было удалено.
- Повторное создание объекта сделало прежнюю таблицу connections недействительной.
Подтвердите ветвь причины, объясняющую отсутствие активного connection для cookie, используя аргументы вызова, состояние объекта, метаданные, сведения об устройстве или трассировки поставщика.
Данные и телеметрия
- Запишите этот HRESULT, 0x80040004, имя native-метода, ID процесса и потока, ID операции, сборку компонента, архитектуру и затраченное время.
- Сохраните поколение объекта, идентичность link или storage, состояние активации, cookie advise, срок жизни окна и формат представления.
- Сохраните IErrorInfo, расширенный статус поставщика, событие storage или устройства и первый нижележащий сбой, предшествовавший этому HRESULT.
- Записывайте временные метки и ID операций для этого результата, чтобы callbacks можно было расположить по времени относительно неудачного Unadvise или управления существующим OLE advise connection.
- При обработке этого HRESULT, выполняйте unadvise только для активных cookies, освобождайте интерфейсы сервера и site в документированном порядке и сохраняйте storage, если пользователь отменил действие или состояние результата неясно.
Телеметрия для этого результата должна сохранять структурные факты, доказывающие отсутствие активного advisory connection для переданного cookie, исключая содержимое, учётные данные, байты firmware, ключи CSS и персональные данные.
Последовательность диагностики
- Зафиксируйте этот HRESULT на native-границе до того, как framework преобразует его в общее исключение.
- Определите точное поколение объекта и метод среди IOleObject, IOleLink, IOleCache, IAdviseSink, IPersistStorage, IOleInPlaceObject, moniker, verb и callbacks client site.
- Докажите решающее условие: переданный connection cookie не идентифицирует активное advisory connection этого объекта.
- Проверяйте вероятные причины независимо: cookie принадлежит другому объекту; connection уже удалено; повторное создание объекта сделало прежнюю таблицу connections недействительной.
- Перед очисткой после этого результата, классифицируйте каждый выходной результат как действительный, неизменённый, частичный или с переданным владением.
- Для этого результата, меняйте по одному кандидату причины — принадлежность cookie, уже выполненный disconnect или поколение объекта — и воспроизводите на минимальном стенде.
Правильная обработка и восстановление
Для этого результата, основное восстановление — учитывать cookies отдельно для каждого поколения объекта и сделать очистку disconnect идемпотентной, не используя устаревшие идентификаторы. Отчёт о OLE_E_NOCONNECTION должен показывать достаточно состояния Unadvise или управления существующим OLE advise connection, чтобы понять, почему cookie не соответствует активному connection, без отладчика в production.
Компонент, ответственный за этот результат, должен определить идемпотентность, отмену, лимит попыток и согласование для неудачного Unadvise или управления существующим advise connection. Перед повтором OLE_E_NOCONNECTION.
Практический сценарий
Контейнер заново подключает встроенный объект после reload, но позже вызывает Unadvise с cookie от предыдущего экземпляра. Зафиксируйте решающее состояние для этого результата и проверьте восстановление на новом поколении объекта или запроса.
Отличие от связанных HRESULT
CONNECT_E_NOCONNECTION — аналог из семейства connection point; этот HRESULT относится к управлению OLE advise. Тесты и телеметрия должны сохранять это различие для этого результата.
Рекомендации разработчикам и администраторам
Разработчикам, обрабатывающим OLE_E_NOCONNECTION следует явно управлять временем жизни объекта и переходами состояния, сохранять native HRESULT и обеспечивать безопасную очистку при частичной инициализации или частичных выходных данных. Создайте небольшой стенд container/server, покрывающий состояния loaded, running, in-place active, UI-active, static, linked и shutdown.
Для этого результата широкие изменения разрешений или совместимости неуместны, если данные об отсутствии активного advisory connection для cookie не указывают на этот слой. Исправление для этого результата должно затрагивать только компонент, поставщика, документ, устройство или конфигурацию, на которые указывают собранные данные.
Ссылки
- Microsoft: общие коды ошибок COM и OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: IOleObject — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: интерфейсы OLE и передачи данных — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: кэширование представлений OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
Нужно найти другой код? Найти другой код состояния или ошибки.