Compartir vía


MDA de disconnectedContext

Nota:

Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.

El asistente para la depuración administrada (MDA, por sus siglas en inglés) disconnectedContext se activa cuando el CLR intenta realizar una transición a un contexto o apartamento desconectado mientras atiende una solicitud relativa a un objeto COM.

Síntomas

Las llamadas realizadas en un contenedor RCW (RCW) se entregan al componente COM subyacente en el contexto o apartamento actual, en vez de entregarse en el que existen. Esto puede causar daños o pérdida de datos si el componente COM no es multiproceso, como en el caso de componentes de contenedor uniproceso (STA, por sus siglas en inglés). O bien, si el RCW es un proxy, la llamada puede producir una COMException con un HRESULT de RPC_E_WRONG_THREAD.

Causa

El apartamento o contexto OLE se cierra cuando el CLR intenta realizar una transición hacia él. Con frecuencia, la causa es que los contenedores STA se cierran antes de que todos los componentes COM propiedad del apartamento se liberen completamente. Esto puede deberse a una llamada explícita del código de usuario en un RCW o mientras el CLR manipula el componente COM, por ejemplo, cuando el CLR libera el componente COM si el RCW asociado se ha recolectado por no utilizarse.

Solución

Para evitar este problema, asegúrese de que el subproceso que posee el STA no termina antes de que la aplicación haya finalizado con todos los objetos que habitan en el apartamento. Lo mismo es aplicable a los contextos; asegúrese de que estos no se cierran antes de que la aplicación finalice completamente con todos los componentes COM que habitan en el contexto.

Efecto en el Runtime

Este MDA no tiene ningún efecto en el CLR. Solo recoge datos sobre el contexto desconectado.

Output

Recoge la cookie de contexto del apartamento o contexto desconectado.

Configuración

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

Consulte también