Partager via


Assistant Débogage managé disconnectedContext

Remarque

Cet article est spécifique au .NET Framework. Elle ne s’applique pas aux implémentations plus récentes de .NET, notamment .NET 6 et versions ultérieures.

L'Assistant Débogage managé disconnectedContext est activé quand le CLR essaie d'effectuer une transition vers un contexte ou un cloisonnement déconnecté pendant le traitement d'une demande concernant un objet COM.

Symptômes

Les appels effectués sur un wrapper RCW (Runtime Callable Wrapper) sont fournis au composant COM sous-jacent dans le contexte ou cloisonnement actuel plutôt que celui où ils se trouvent. Cela peut entraîner une altération et/ou une perte de données si le composant COM n'est pas multithread, comme dans le cas de composants de thread cloisonné. Par ailleurs, si le wrapper RCW est lui-même un proxy, l'appel peut se traduire par la levée d'une COMException avec un HRESULT de valeur RPC_E_WRONG_THREAD.

Cause

Le contexte ou cloisonnement OLE a été arrêté au moment où le CLR a essayé d'effectuer une transition vers ce contexte ou cloisonnement. En règle générale, cela se produit quand les threads cloisonnés sont arrêtés avant que tous les composants COM détenus par le cloisonnement ne soient complètement libérés. Cela peut être dû à un appel explicite à partir du code utilisateur sur un wrapper RCW ou à la manipulation du composant COM par le CLR lui-même, par exemple quand le CLR libère le composant COM alors que le wrapper RCW associé a été récupéré par le Garbage Collector.

Résolution

Pour éviter ce problème, assurez-vous que le thread qui détient le thread cloisonné ne prend pas fin tant que l'application n'a pas terminé de traiter tous les objets qui se trouvent dans le cloisonnement. Il en va de même pour les contextes ; assurez-vous qu'un contexte n'est pas arrêté tant que l'application n'a pas complètement terminé de traiter tous les composants COM qui appartiennent à ce contexte.

Effet sur le runtime

Cet Assistant Débogage managé n'a aucun effet sur le CLR. Il fournit uniquement des informations sur le contexte déconnecté.

Sortie

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

Configuration

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

Voir aussi