Udostępnij za pośrednictwem


disconnectedContext MDA

Uwaga

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.

disconnectedContext Asystent zarządzanego debugowania (MDA) jest aktywowany, gdy CLR próbuje przejść do odłączonego mieszkania lub kontekstu podczas obsługi żądania dotyczącego obiektu COM.

Objawy

Wywołania wykonywane na otoce wywoływanej środowiska uruchomieniowego (RCW) są dostarczane do bazowego składnika COM w bieżącym mieszkaniu lub kontekście zamiast do tego, w którym istnieją. Może to spowodować uszkodzenie i utratę danych, jeśli składnik COM nie jest wielowątkowy, jak w przypadku składników apartamentów jednowątkowych (STA). Alternatywnie, jeśli RCW jest serwerem proxy, wywołanie COMException może spowodować zgłoszenie elementu z HRESULT RPC_E_WRONG_THREAD.

Przyczyna

Mieszkanie OLE lub kontekst został zamknięty, gdy CLR próbuje przejść do niego. Jest to najczęściej spowodowane tym, że mieszkania STA są zamykane, zanim wszystkie składniki COM należące do mieszkania zostały całkowicie zwolnione To może wystąpić w wyniku jawnego wywołania z kodu użytkownika na RCW lub podczas gdy sam CLR manipuluje składnikiem COM, na przykład gdy CLR zwalnia składnik COM, gdy skojarzony RCW został odśmiecany.

Rozwiązanie

Aby uniknąć tego problemu, upewnij się, że wątek, który jest właścicielem sta, nie kończy się przed zakończeniem aplikacji ze wszystkimi obiektami, które mieszkają w mieszkaniu. To samo dotyczy kontekstów; upewnij się, że konteksty nie są zamykane przed całkowitym zakończeniem działania aplikacji przy użyciu składników COM, które znajdują się w kontekście.

Wpływ na środowisko uruchomieniowe

Ta usługa MDA nie ma wpływu na CLR. Raportuje tylko dane dotyczące rozłączonego kontekstu.

Wyjście

Raportuje plik cookie kontekstu rozłączonego mieszkania lub kontekstu.

Konfigurowanie

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

Zobacz też