MDA disconnectedContext
Aggiornamento: novembre 2007
L'assistente al debug gestito disconnectedContext viene attivato quando CLR tenta di passare in un apartment o in un contesto disconnesso durante l'elaborazione di una richiesta relativa a un oggetto COM.
Sintomi
Le chiamate effettuate su un Runtime Callable Wrapper (RCW) vengono consegnate al componente COM sottostante presente nell'apartment o nel contesto corrente anziché a quello al quale appartengono. In questo modo è possibile che si verifichi un danneggiamento o una perdita di dati se il componente COM non è multithreading, come nel caso di componenti apartment a thread singolo (STA). In alternativa, se il RCW è un proxy, la chiamata può generare una COMException con un oggetto HRESULT RPC_E_WRONG_THREAD.
Causa
Al tentativo di CLR di passare al contesto o all'apartment OLE, il contesto o l'apartment è stato chiuso. La causa più comune in questi casi è data dalla chiusura di apartment STA prima del rilascio di tutti i componenti COM di proprietà dell'apartment. Ciò si può verificare in seguito a una chiamata esplicita dal codice utente su un RCW o nel corso della modifica del componente COM da parte di CLR, ad esempio al rilascio del componente COM dopo che il RCW associato è stato sottoposto a Garbage Collection.
Risoluzione
Per evitare il problema, verificare che il thread proprietario dell'apartment STA non venga terminato prima del completamento dell'applicazione con tutti gli oggetti presenti nell'apartment specifico. Ciò vale anche per i contesti. Verificare che i contesti non vengano chiusi prima del completamento dell'applicazione con gli eventuali oggetti COM presenti nel contesto specifico.
Effetto sul runtime
Questo assistente al debug gestito non produce effetti su CLR. Si limita a generare un report dei dati relativi al contesto disconnesso.
Output
Viene segnalato il cookie di contesto dell'apartment o del contesto disconnesso.
Configurazione
<mdaConfig>
<assistants>
<disconnectedContext enable="false" />
</assistants>
</mdaConfig>
Vedere anche
Concetti
Diagnostica degli errori tramite gli assistenti al debug gestito
Cenni preliminari sul marshalling di interoperabilità