Compartir a través de


MDA de disconnectedContext

Actualización: noviembre 2007

El Ayudante para la depuración administrada (MDA) de disconnectedContext se activa cuando el CLR intenta desplazarse en un contexto o apartamento desconectado mientras se da respuesta a solicitud relacionada con un objeto COM.

Síntomas

Las llamadas realizadas en un Contenedor al que se puede llamar en tiempo de ejecución (RCW) se distribuyen al componente COM subyacente en el contexto o apartamento actual en lugar de hacerlo en el lugar donde existen. Esto puede provocar que se pierdan y/o dañen datos si el componente COM no es multiproceso, como en el caso de componentes de apartamento de un único subproceso (STA). De forma alternativa, si RCW es un proxy, la llamada podría hacer que se produjese COMException con un HRESULT de RPC_E_WRONG_THREAD.

Motivo

El contexto o apartamento de OLE se cierra cuando el CLR intenta desplazarse a él. Normalmente, este hecho se produce mediante apartamentos STA que se cierran antes de que todos los componentes COM propiedad del apartamento hayan sido completamente liberados. Esto puede ocurrir como resultado de una llamada explícita del código de usuario de un RCW o mientras que el propio CLR esté manipulando el componente COM; por ejemplo, cuando el CLR libera al componente COM cuando el RCW asociado forma parte de la recolección de elementos no utilizados.

Resolución

Para evitar este problema, hay que asegurarse de que el subproceso propietario del STA no termina antes de que la aplicación haya finalizado con todos los objetos presentes en el apartamento. Lo mismo se aplica a los contextos. Hay que asegurarse de que los contextos no se cierren antes de que la aplicación haya finalizado por completo con cualquier componente COM presente en el contexto.

Efecto en tiempo de ejecución

Este MDA no tiene ningún efecto en el CLR. Sólo comunica datos sobre el contexto desconectado.

Resultados

Informa sobre la cookie de contexto del contexto o apartamento desconectado.

Configuración

<mdaConfig>
  <assistants>
    <disconnectedContext enable="false" />
  </assistants>
</mdaConfig>

Vea también

Conceptos

Diagnóstico de errores con ayudantes de depuraciones administradas

Información general acerca del cálculo de referencia de interoperabilidad

Referencia

MarshalAsAttribute

Otros recursos

Interoperabilidad