다음을 통해 공유


disconnectedContext MDA

CLR에서 COM 개체에 관한 요청을 서비스하는 동안 연결이 끊어진 아파트나 컨텍스트로 전환을 시도하면 disconnectedContext MDA(관리 디버깅 도우미)가 활성화됩니다.

증상

RCW(RCW)에서 수행된 호출은 기존의 구성 요소 대신 현재 아파트 또는 컨텍스트의 내부 COM 구성 요소로 전달됩니다. 이때 COM 구성 요소가 다중 스레드가 아닌 경우에는 STA(단일 스레드 아파트) 구성 요소의 경우와 마찬가지로 손상 또는 데이터 손실이 발생할 수 있습니다. 대신 RCW가 프록시인 경우 이 호출은 RPC_E_WRONG_THREAD의 HRESULT를 사용하여 COMException throw를 발생시킬 수도 있습니다.

원인

CLR에서 전환을 시도할 때 OLE 아파트 또는 컨텍스트가 이미 종료된 상태였습니다. 이 문제의 가장 일반적인 원인은 STA 아파트에서 소유한 모든 COM 구성 요소가 완전히 해제되기 전에 해당 STA 아파트가 종료되었기 때문입니다. 이 문제는 RCW의 사용자 코드에서 명시적 호출이 있거나 CLR에서 COM 구성 요소를 직접 조작하는 동안 발생할 수 있습니다. 예를 들면 CLR에서 관련 RCW가 가비지 수집되었을 때 COM 구성 요소를 해제하는 경우가 이에 해당됩니다.

해결 방법

이 문제가 발생하지 않도록 하려면 STA 아파트에 있는 모든 개체와 함께 응용 프로그램이 종료되기 전에 해당 STA를 소유한 스레드가 종료되지 않도록 해야 합니다. 컨텍스트의 경우도 마찬가지입니다. 컨텍스트 안에 있는 모든 COM 구성 요소와 함께 응용 프로그램이 완전히 종료될 때까지 컨텍스트가 종료되지 않도록 해야 합니다.

런타임 효과

이 MDA는 CLR에 아무런 영향을 주지 않습니다. 연결이 끊어진 컨텍스트에 대한 데이터만 보고합니다.

Output

연결이 끊어진 아파트 또는 컨텍스트의 컨텍스트 쿠키를 보고합니다.

구성

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

참고 항목

참조

MarshalAsAttribute

개념

관리 디버깅 도우미를 사용하여 오류 진단

Interop 마샬링

기타 리소스

상호 운용성