Aracılığıyla paylaş


Enterprise Services ve COM+ İşlemleriyle Birlikte Çalışabilirlik

Ad alanı, System.Transactions bu ad alanı kullanılarak oluşturulan işlem nesneleri ile COM+ aracılığıyla oluşturulan işlemler arasında birlikte çalışabilirliği destekler.

COM+ ile birlikte çalışabilirlik düzeyini belirtmek için yeni bir EnterpriseServicesInteropOption örneği oluşturduğunuzda TransactionScope numaralandırmasını kullanabilirsiniz.

Varsayılan olarak, uygulama kodunuz statik Current özelliği denetlediğinde, System.Transactions aksi takdirde geçerli olabilecek bir işlemi veya TransactionScopeCurrent olduğunu belirten bir nesnesini aramaya çalışır. Bunlardan birini bulamazsa, System.Transactions işlem için COM+ bağlamını sorgular. System.Transactions COM+ bağlamından bir işlem bulabilir, unutmayın ki System.Transactions için yerel olan transaksiyonları yine de tercih eder.

Birlikte çalışabilirlik düzeyleri

Numaralandırma aşağıdaki EnterpriseServicesInteropOption birlikte çalışabilirlik düzeylerini tanımlar—NoneFull ve Automatic.

Bu sınıf, TransactionScope parametresini kabul eden oluşturucular sağlar EnterpriseServicesInteropOption.

Noneadından da anlaşılacağı gibi, bağlamlar ve işlem kapsamları arasında System.EnterpriseServices birlikte çalışabilirlik olmadığını belirtir. TransactionScope kullanarak bir None nesnesi oluşturulduktan sonra, Current üzerinde yapılan değişiklikler COM+ bağlamında yansıtılmaz. Benzer şekilde, COM+ bağlamındaki işlemde yapılan değişiklikler Current yansıtılmaz. Bu, ek eşitleme gerektiremediğinden için System.Transactions en hızlı işlem modudur. None değeri, TransactionScope parametresini almayan tüm oluşturucularla birlikte EnterpriseServicesInteropOption tarafından kullanılan varsayılan değerdir.

Ortamdaki işleminizi System.EnterpriseServices işlemlerle birleştirmek istiyorsanız, ya Full ya da Automatic kullanmanız gerekir. Bu değerlerin her ikisi de bileşenleri olmayan hizmetler adlı bir özelliği kullanır ve bu nedenle bunları kullanırken Windows XP Service Pack 2 veya Windows Server 2003 üzerinde çalışıyor olmanız gerekir.

Fullve System.Transactions için System.EnterpriseServices ortam işlemlerinin her zaman aynı olduğunu belirtir. Yeni bir System.EnterpriseServices işlem bağlamı oluşturulmasına ve TransactionScope için geçerli olan işlemin bu bağlamda geçerli olmasına yol açar. Bu nedenle Current içindeki işlem, Transaction içindeki işlemle tamamen eşitleniyor. Yeni COM+ bağlamlarının oluşturulması gerekebileceğinden bu değer bir performans cezasına neden olur.

Automatic aşağıdaki gereksinimleri belirtir:

  • İşaretlendiğinde Current , System.Transactions varsayılan bağlam dışında bir bağlamda çalıştığını algılarsa COM+ bağlamındaki işlemleri desteklemelidir. Varsayılan bağlamın bir işlem içeremeyeceğini unutmayın. Bu nedenle, varsayılan bağlamda, Automatic hizmetine rağmen, System.Transactions tarafından kullanılan iş parçacığı yerel depolamasında depolanan işlem Current için döndürülür.

  • Yeni TransactionScope bir nesne oluşturulursa ve oluşturma varsayılan bağlam dışında bir bağlamda gerçekleşirse, nesne için TransactionScope geçerli olan işlem COM+ içinde yansıtılmalıdır. Bu durumda, Automatic yeni bir COM+ bağlamı oluşturması bakımından Full gibi davranır.

Ayrıca, Current hem Full hem de Automatic içinde ayarlandığında, bu modların her ikisi de Current'in doğrudan ayarlanamayacağını belirtir. Bir Current oluşturma dışında, TransactionScope'yu doğrudan ayarlama girişimleri bir InvalidOperationException ile sonuçlanır. EnterpriseServicesInteropOption Numaralandırma değeri, hangi değerin kullanılacağını açıkça belirtmeyen yeni işlem kapsamları tarafından devralınır. Örneğin, TransactionScope ile yeni bir Full nesne oluşturur ve ardından ikinci bir TransactionScope nesne oluşturur, ancak bir EnterpriseServicesInteropOption değeri belirtmezseniz, ikinci TransactionScope nesnede de bir Full bulunur.

Özetle, yeni bir işlem kapsamı oluştururken aşağıdaki kurallar geçerlidir:

  1. Current bir işlem olup olmadığını görmek için denetlendi. Bu denetim şu sonuçlara neden olur:

  2. Oluşturucu tarafından TransactionScopeOption geçirilen numaralandırmanın değeri TransactionScope denetlendi. Bu, yeni bir işlem oluşturulması gerekip gerekmediğini belirler.

  3. Yeni bir işlem oluşturulacaksa aşağıdaki değerler EnterpriseServicesInteropOption şu şekilde sonuçlanır:

    • Full: COM+ bağlamıyla ilişkilendirilmiş bir işlem oluşturulur.

    • None: bir System.Transactions işlem oluşturulur.

    • Automatic: COM+ bağlamı varsa, bir işlem oluşturulur ve bağlama eklenir.

Aşağıdaki tabloda Enterprise Services (ES) bağlamı ve EnterpriseServicesInteropOption numaralandırmasının kullanılmasıyla bir işlem gerektiren işlem kapsamı gösterilmektedir.

ES Bağlamı Hiç kimse Otomatik Tamamen dolu
Varsayılan bağlam Varsayılan bağlam Varsayılan bağlam Yeni oluştur
işlem bağlamı
Varsayılan olmayan bağlam Müşterinin bağlamını korumak Yeni işlem bağlamı oluşturma Yeni işlem bağlamı oluşturma

Aşağıdaki tabloda, belirli bir System.EnterpriseServices bağlamda ve EnterpriseServicesInteropOption sabit listesi belirtilerek işlem gerektiren bir işlem kapsamı verildiğinde ortam işleminin ne olduğu gösterilmektedir.

ES Bağlamı Hiç kimse Otomatik Tamamen dolu
Varsayılan bağlam ST ST ES
Varsayılan olmayan bağlam ST ES ES

Yukarıdaki tabloda: