Поделиться через


disconnectedContext MDA

Примечание.

Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.

Помощник отладки управляемого кода disconnectedContext (MDA) активируется, когда среда CLR пытается перейти в отключенное подразделение или контекст во время обслуживания запроса, связанного с COM-объектом.

Симптомы

Вызовы, выполняемые для вызываемой оболочки времени выполнения (RCW), направляются в базовый компонент COM в текущем подразделении или контексте вместо того, где они существуют. Это может привести к повреждению или потере данных, если компонент COM не является многопоточным, как в случае с компонентами однопотокового подразделения (STA). Кроме того, если сама вызываемая оболочка времени выполнения является прокси-сервером, вызов может привести к возникновению исключения COMException с HRESULT RPC_E_WRONG_THREAD.

Причина

Работа контекста или подразделения OLE была завершена, когда среда CLR попыталась перейти в них. Чаще всего это вызвано завершением работы однопотоковых подразделений до полного освобождения всех компонентов COM, принадлежащих этому подразделению. Это может произойти в результате явного вызова из пользовательского кода в вызываемой оболочке времени выполнения либо во время работы среды CLR с этим компонентом COM, например, когда среда CLR освобождает компонент COM после сборки мусора для соответствующей вызываемой оболочки времени выполнения.

Разрешение

Чтобы избежать этой проблемы, убедитесь, что поток, которому принадлежит однопотоковое подразделение, не завершает работу до тех пор, пока приложение не завершит обработку всех объектов, находящихся в подразделении. То же самое касается и контекстов — убедитесь, что контексты не завершают работу до тех пор, пока приложение не завершит обработку всех COM-объектов, находящихся в этом контексте.

Влияние на среду выполнения

Этот помощник отладки управляемого кода не оказывает никакого влияния на среду CLR. Он только выводит данные об отключенном контексте.

Выходные данные

Указание файла cookie контекста для отключенного подразделения или контекста.

Настройка

<mdaConfig>
  <assistants>
    <disconnectedContext />
  </assistants>
</mdaConfig>

См. также