Bagikan melalui


Aktivasi Konteks

Di COM+, setiap objek COM dibuat dengan konteks terkait. Ini berarti bahwa konteks baru harus dibuat dan diinisialisasi atau konteks yang ada yang sesuai digunakan. Proses ini dikenal sebagai aktivasi. Di COM+, objek diaktifkan baik dalam konteksnya sendiri atau di pembuatnya (objek yang telah meminta agar objek diaktifkan—misalnya, dengan memanggil CoCreateInstance).

Dalam beberapa keadaan, seperti dengan pengumpulan objek, objek diaktifkan tanpa dibuat dari awal. Dalam hal ini, instans yang sedang berjalan diaktifkan dalam konteks. Selama masa pakainya, mungkin berulang kali diaktifkan dalam konteks yang berbeda.

Mekanisme dasar sama dalam kedua kasus—objek dikaitkan dengan konteks dan konteks tersebut diinisialisasi dengan benar untuk mewakili kebutuhan run-time objek.

Aliran Properti Konteks

Ketika objek diaktifkan sebagai respons terhadap permintaan pembuatan dari objek lain, COM+ perlu menengahi di antara objek tersebut untuk mengaktifkan objek hilir dengan benar. COM+ harus membandingkan konteks pemanggil dengan konfigurasi komponen yang disebut dan kemudian memutuskan tempat untuk mengaktifkan komponen hilir dan cara menginisialisasi properti konteksnya.

Untuk menemukan konfigurasi komponen, COM+ mencarinya di database pendaftaran kelas COM+, yang dioptimalkan untuk pencarian run-time yang sangat cepat. (Ini ditentukan oleh cara Anda mengonfigurasi komponen saat menginstalnya ke aplikasi COM+.) Konfigurasi komponen kemudian diperiksa terhadap status properti konteks pemanggil.

Dalam beberapa kasus, konfigurasi konsisten dengan konteks pemanggil dan komponen dapat diaktifkan dalam konteks pemanggil. Ini hanya dapat terjadi jika konteks pemanggil memenuhi semua persyaratan run-time objek baru.

Ketika komponen hilir tidak dapat diaktifkan dalam konteks pemanggil, komponen tersebut diaktifkan dalam konteksnya sendiri di apartemen yang sesuai. Ketika ini terjadi, properti konteks tertentu dapat mengalir dari penelepon ke penerima panggilan. Misalnya, jika pemanggil dikaitkan dengan transaksi dan penerima panggilan mendukung transaksi, objek baru mendapatkan konteksnya sendiri (untuk memilih dalam transaksi, pemanggil harus memiliki bendera konsisten sendiri) dan mewarisi ID transaksi pemanggil dan ID aktivitas (yang berada dalam domain transaksi dan sinkronisasi yang sama).

Properti Konteks yang Diabaikan

Bergantung pada bagaimana komponen dikonfigurasi, beberapa properti konteks mungkin tidak berperan dalam menentukan apakah komponen diaktifkan dalam konteks pembuat atau konteksnya sendiri. Misalnya, pengaturan Transaksi Dinonaktifkan dan Sinkronisasi Dinonaktifkan, menunjukkan adanya transaksi atau domain sinkronisasi, tidak akan memainkan peran apa pun dalam aktivasi komponen. Properti ini pada dasarnya diabaikan ketika konteks mengalir. Atau jika komponen hanya menggunakan pemeriksaan akses tingkat proses, properti konteks keamanannya diabaikan—konfigurasi keamanan komponen tidak akan pernah memainkan peran dalam aktivasinya.

Memaksa Aktivasi dalam Konteks Pemanggil

Dalam beberapa keadaan, Anda mungkin ingin objek diaktifkan hanya dalam konteks pemanggilnya—yaitu, tidak pernah diaktifkan dalam konteksnya sendiri. Misalnya, Anda mungkin ingin mengontrol perilaku objek saat dipanggil di seluruh batas konteks.

Anda dapat memastikan bahwa objek tidak dapat diaktifkan dalam konteksnya sendiri dengan memilih opsi Harus diaktifkan dalam konteks pemanggil pada tab Aktivasi halaman Properti komponen, menggunakan alat administratif Layanan Komponen. (Lihat Menerapkan Aktivasi dalam Konteks Pemanggil untuk instruksi langkah demi langkah.) Saat Anda memilih opsi ini, jika objek tidak dapat diaktifkan dalam konteks pemanggil, CoCreateInstance gagal, mengembalikan CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.

Konteks Default

Konteks default ada untuk mendukung komponen yang tidak dikonfigurasi—yaitu, komponen COM tidak diinstal dalam aplikasi COM+ dan tidak terdaftar di database pendaftaran kelas COM+. Jika komponen yang tidak dikonfigurasi memiliki model utas yang kompatibel, komponen tersebut diaktifkan dalam konteks pemanggil. Jika tidak, mereka diaktifkan dalam konteks default di apartemen yang sesuai. Setiap apartemen memiliki konteks default untuk mendukung objek COM yang tidak menggunakan layanan COM+.

Aktivasi Kait

Dengan menerapkan IObjectControl::Activate dan IObjectControl::D eactivate, Anda dapat menghubungkan aktivasi dan penonaktifan bersama-sama untuk melakukan inisialisasi khusus dalam konteks baru. Metode ini dipanggil oleh COM+ pada titik-titik tertentu dalam siklus hidup objek, ketika objek dikonfigurasi untuk menggunakan Aktivasi JIT atau pengumpulan objek. Lihat COM+ Aktivasi Just-in-Time dan KUMPULAN Objek COM+ untuk detail selengkapnya.

Intersepsi Panggilan Lintas Konteks