disconnectedContext MDA
當 CLR 嘗試轉換至中斷連接的 Apartment 或內容,並且處理關於 COM 物件的要求時,disconnectedContext Managed 偵錯助理 (MDA) 就會啟動。
症狀
在執行階段可呼叫包裝函式 (RCW) 進行的呼叫,會傳遞至目前 Apartment 或內容中的基礎 COM 元件,而非它們存在的其中一個內容。 如此,如果 COM 元件不是多執行緒的,而是單一執行緒 Apartment (STA) 元件,可能就會造成損毀或資料遺失。 或者,如果 RCW 本身就是 Proxy,呼叫就可能會擲回具有 RPC_E_WRONG_THREAD 之 HRESULT 的 COMException。
原因
當 CLR 嘗試轉換至 OLE Apartment 或內容時,OLE Apartment 或內容已經關閉。 造成這個問題的最常見原因,就是在 STA Apartment 所擁有的所有 COM 元件完全釋放之前,先將該 Apartment 關閉。這可能是使用者程式碼對 RCW 的明確呼叫,或是 CLR 本身在管理 COM 元件的結果,例如,當 CLR 釋放 COM 元件時,關聯的 RCW 已經遭到記憶體回收。
解決方式
若要避免發生這個問題,請確定在應用程式結束 Apartment 中的所有運作物件之前,擁有 STA 的執行緒不會結束。 相同的解決方式也適用於內容;請確定在應用程式完全結束內容中運作的所有 COM 元件之前,不會關閉內容。
對執行階段的影響
這個 MDA 對 CLR 無效。 它只會報告有關中斷連接內容的資料。
Output
報告中斷連接 Apartment 或內容的內容 Cookie。
組態
<mdaConfig>
<assistants>
<disconnectedContext enable="false" />
</assistants>
</mdaConfig>