Partager via


Assistant Débogage managé disconnectedContext

L'Assistant Débogage managé (MDA, Managed Debugging Assistant) disconnectedContext est activé lorsque le CLR tente d'effectuer une transition vers un cloisonnement ou un contexte déconnecté tout en desservant une demande concernant un objet COM.

Symptômes

Les appels faits sur un Wrapper pouvant être appelé par le runtime (RCW) sont transmis au composant COM sous-jacent dans le cloisonnement ou le contexte courant au lieu de celui dans lequel ils existent. Cela peut entraîner l'altération et/ou la perte de données si le composant COM n'est pas multithread, comme dans le cas de composants STA (Single-Threaded Apartment). Autrement, si le RCW est lui-même un proxy, l'appel peut entraîner la levée d'une COMException avec un HRESULT de RPC_E_WRONG_THREAD.

Cause

Le cloisonnement ou le contexte OLE est arrêté lorsque le CLR tente d'y effectuer une transition. Le plus souvent, cette situation survient lorsque les threads cloisonnés (STA, Single-Threaded Apartment) sont fermés avant que tous les composants COM détenus par le cloisonnement aient été entièrement libérés. Cela peut se produire du fait d'un appel explicite d'un code utilisateur sur un RCW ou pendant que le CLR lui-même manipule le composant COM, par exemple lorsque le CLR libère le composant COM une fois que le RCW associé a été récupéré par le garbage collector.

Solution

Pour éviter ce problème, assurez-vous que le thread qui possède le STA ne prend pas fin avant que l'application ait terminé de traiter tous les objets qui résident dans le cloisonnement. Il en est de même pour les contextes ; assurez-vous que les contextes ne sont pas arrêtés avant que l'application ait complètement terminé de traiter tous les composants COM qui résident dans le contexte.

Effet sur le runtime

Ce MDA n'a aucun effet sur le CLR. Il signale uniquement des données relatives au contexte déconnecté.

Sortie

Signale le cookie de contexte du cloisonnement ou du contexte déconnecté.

Configuration

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

Voir aussi

Référence

MarshalAsAttribute

Concepts

Diagnostic d'erreurs avec les Assistants de débogage managés

Marshaling d'interopérabilité

Autres ressources

Interopérabilité