Delen via


disconnectedContext MDA

Notitie

Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.

De disconnectedContext beheerde foutopsporingsassistent (MDA) wordt geactiveerd wanneer de CLR probeert over te stappen naar een niet-verbonden appartement of context tijdens het uitvoeren van een aanvraag met betrekking tot een COM-object.

Symptomen

Aanroepen die worden gedaan op een Runtime Callable Wrapper (RCW) worden geleverd aan het onderliggende COM-onderdeel in het huidige appartement of de huidige context in plaats van het onderdeel waarin ze bestaan. Dit kan leiden tot beschadiging en of gegevensverlies als het COM-onderdeel niet multithreaded is, zoals in het geval van STA-onderdelen (single threaded apartment). Als de RCW zelf een proxy is, kan de aanroep leiden tot het genereren van een COMException met EEN HRESULT van RPC_E_WRONG_THREAD.

Oorzaak

Het OLE-appartement of de context is afgesloten wanneer de CLR probeert over te stappen. Dit wordt meestal veroorzaakt doordat STA-appartementen worden afgesloten voordat alle COM-onderdelen die eigendom zijn van het appartement volledig zijn vrijgegeven. Dit kan gebeuren als gevolg van een expliciete aanroep van gebruikerscode op een RCW of terwijl de CLR zelf het COM-onderdeel bewerkt, bijvoorbeeld wanneer de CLR het COM-onderdeel vrijgeeft wanneer de bijbehorende RCW afval is verzameld.

Oplossing

Om dit probleem te voorkomen, moet u ervoor zorgen dat de thread die eigenaar is van de STA niet wordt beƫindigd voordat de toepassing is voltooid met alle objecten die in het appartement wonen. Hetzelfde geldt voor contexten; zorg ervoor dat contexten niet worden afgesloten voordat de toepassing volledig is voltooid met com-onderdelen die zich in de context bevinden.

Effect op de runtime

Deze MDA heeft geen effect op de CLR. Alleen gegevens over de niet-verbonden context worden gerapporteerd.

Uitvoer

Rapporteert de context cookie van het niet-verbonden appartement of de context.

Configuratie

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

Zie ook