Aracılığıyla paylaş


Bağlam Etkinleştirme

COM+'da, her COM nesnesi ilişkili bir bağlamla oluşturulur. Bu, yeni bir bağlam oluşturulması ve başlatılması gerektiği veya uygun bir mevcut bağlam kullanıldığı anlamına gelir. Bu işlem etkinleştirmeolarak bilinir. COM+ dilinde bir nesne kendi bağlamında veya oluşturucusunun nesnesinde etkinleştirilir (örneğin, CoCreateInstance) çağrılarak nesnenin etkinleştirilmesini isteyen bir nesne).

nesne havuzugibi bazı durumlarda, sıfırdan oluşturulmadan bir nesne etkinleştirilir. Bu durumda, çalışan bir örnek bir bağlam içinde etkinleştirilir. Kullanım ömrü boyunca farklı bağlamlarda tekrar tekrar etkinleştirilebilir.

Temel mekanizma her iki durumda da aynıdır; bir nesne bir bağlamla ilişkilendirilir ve bu bağlam nesnenin çalışma zamanı gereksinimlerini temsil etmek için düzgün bir şekilde başlatılır.

Bağlam Özellikleri Akışı

Bir nesne başka bir nesneden gelen oluşturma isteğine yanıt olarak etkinleştirildiğinde, COM+'ın aşağı akış nesnesini düzgün bir şekilde etkinleştirmek için aralarında aracılık yapması gerekir. COM+, çağıranın bağlamını çağrılan bileşenin yapılandırmasıyla karşılaştırmalı ve ardından aşağı akış bileşeninin nerede etkinleştirileceğine ve bağlam özelliklerinin nasıl başlatıldığına karar vermelisiniz.

Bileşenin yapılandırmasını keşfetmek için COM+, son derece hızlı çalışma zamanı aramaları için en iyi duruma getirilmiş COM+ sınıf kayıt veritabanında arar. (Bu, bir bileşeni COM+ uygulamasına yüklerken nasıl yapılandırdığınıza göre belirlenir.) Ardından bileşenin yapılandırması, çağıranın bağlam özelliklerinin durumuna göre incelenir.

Bazı durumlarda yapılandırma, çağıranın bağlamıyla tutarlıdır ve bileşen çağıranın bağlamında etkinleştirilebilir. Bu durum yalnızca çağıranın bağlamı yeni nesnenin tüm çalışma zamanı gereksinimlerini karşılıyorsa gerçekleşebilir.

Aşağı akış bileşeni çağıranın bağlamında etkinleştirilemediğinde, uygun bir dairede kendi bağlamında etkinleştirilir. Bu durum oluştuğunda, belirli bağlam özellikleri çağırandan çağırana akabilir. Örneğin, çağıran bir işlemle ilişkiliyse ve çağıran işlemleri destekliyorsa, yeni nesne kendi bağlamını alır (işlemde oy vermek için kendi tutarlı bayrağına sahip olması gerekir) ve çağıranın işlem kimliğini ve etkinlik kimliğini (aynı işlem ve eşitleme etki alanında bulunur) devralır.

Yoksayılan Bağlam Özellikleri

Bir bileşenin nasıl yapılandırıldığına bağlı olarak, bazı bağlam özellikleri bileşenin oluşturucu bağlamında mı yoksa kendi bağlamında mı etkinleştirildiğini belirlemede rol oynayamayabilir. Örneğin, bir işlemin veya eşitleme etki alanının varlığını gösteren Devre Dışı İşlemler ve Eşitleme Devre Dışı ayarları, bileşenin etkinleştirmesinde hiçbir rol oynamaz. Bağlam akışı yapıldığında bu özellikler temel olarak yoksayılır. Veya bir bileşen yalnızca işlem düzeyinde erişim denetimi kullanıyorsa, güvenlik bağlamı özelliği yoksayılır; bileşenin güvenlik yapılandırması etkinleştirmesinde hiçbir zaman rol oynamaz.

Çağıranın Bağlamında Etkinleştirmeyi Zorlama

Bazı durumlarda, bir nesnenin yalnızca çağıranın bağlamında etkinleştirilmesini isteyebilirsiniz; yani hiçbir zaman kendi bağlamında etkinleştirilmemiş olabilir. Örneğin, bir bağlam sınırı boyunca çağrıldığında nesnenin davranışını denetlemek isteyebilirsiniz.

Bileşen Hizmetleri yönetim aracını kullanarak bileşen Özellikler sayfasının Etkinleştirme sekmesindeki Arayanlar bağlamında etkinleştirilmelidir seçeneğini belirleyerek bir nesnenin kendi bağlamında etkinleştirilememesini sağlayabilirsiniz. (Adım adım yönergeler için bkz. Çağıranın Bağlam Etkinleştirmeyi Zorlama.) Bu seçeneği belirlediğinizde, nesne çağıranın bağlamında etkinleştirilemiyorsa CoCreateInstance başarısız olur ve CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT döndürür.

Varsayılan Bağlam

Yapılandırılmamış bileşenleri(COM+ uygulamalarında yüklü olmayan ve COM+ sınıf kayıt veritabanına kaydedilmemiş COM bileşenleri) desteklemek için varsayılan bağlamlar vardır. Yapılandırılmamış bileşenler uyumlu bir iş parçacığı modeline sahipse, bunlar çağıranın bağlamında etkinleştirilir. Aksi takdirde, uygun dairede varsayılan bağlamda etkinleştirilirler. Her daire, COM+ hizmetlerini kullanmayan COM nesnelerini desteklemek için varsayılan bir bağlama sahiptir.

Kanca Etkinleştirme

IObjectControl::Activate ve IObjectControl::D Eactivateuygulayarak, yeni bağlamda özel başlatma gerçekleştirmek için etkinleştirme ve devre dışı bırakma işlemlerini birbirine bağlayabilirsiniz. Bu yöntemler, nesne JIT etkinleştirme veya nesne havuzu kullanacak şekilde yapılandırıldığında, nesnenin yaşam döngüsündeki belirli noktalarda COM+ tarafından çağrılır. Daha fazla bilgi için bkz. COM+ Tam Zamanında Etkinleştirme ve COM+ Nesne Havuzu .

Bağlamlar Arası Çağrıların Kesilmesi