disconnectedContext MDA

Note

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

Asisten disconnectedContext penelusuran kesalahan terkelola (MDA) diaktifkan ketika CLR mencoba beralih ke apartemen atau konteks yang terputus saat melayani permintaan mengenai objek COM.

Gejala

Panggilan yang dilakukan pada Runtime Callable Wrapper (RCW) dikirimkan ke komponen COM yang mendasarinya di apartemen atau konteks saat ini alih-alih yang ada. Hal ini dapat menyebabkan kerusakan dan atau kehilangan data jika komponen COM tidak multithreaded, seperti dalam kasus komponen apartemen berulir tunggal (STA). Atau, jika RCW itu sendiri adalah proksi, panggilan dapat mengakibatkan pelemparan COMException dengan HRESULT RPC_E_WRONG_THREAD.

Penyebab

Apartemen atau konteks OLE telah dimatikan ketika CLR mencoba untuk beralih ke dalamnya. Ini paling umum disebabkan oleh apartemen STA dimatikan sebelum semua komponen COM yang dimiliki oleh apartemen benar-benar dirilis Ini dapat terjadi sebagai akibat dari panggilan eksplisit dari kode pengguna pada RCW atau sementara CLR itu sendiri memanipulasi komponen COM, misalnya ketika CLR merilis komponen COM ketika RCW terkait telah dikumpulkan sampah.

Resolution

Untuk menghindari masalah ini, pastikan utas yang memiliki STA tidak berakhir sebelum aplikasi selesai dengan semua objek yang tinggal di apartemen. Hal yang sama berlaku untuk konteks; pastikan konteks tidak dimatikan sebelum aplikasi benar-benar selesai dengan komponen COM apa pun yang berada di dalam konteks.

Efek pada Runtime

MDA ini tidak berpengaruh pada CLR. Ini hanya melaporkan data tentang konteks yang terputus.

Hasil

Melaporkan cookie konteks apartemen atau konteks yang terputus.

Konfigurasi

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

Baca juga