Kurumsal Hizmetler ve COM+ İşlemleri ile 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.
Kullanabilirsiniz EnterpriseServicesInteropOption , yeni bir oluşturduğunuzda numaralandırma TransactionScope COM + ile birlikte çalışabilirlik düzeyini belirtmek için örneği.
Varsayılan olarak, uygulama kodunuz statik Current özelliği denetlediğinde, System.Transactions aksi halde geçerli olan bir işlemi veya null olarak Current dikte eden bir TransactionScope nesneyi aramaya çalışır. Bunlardan birini bulamazsa, System.Transactions işlem için COM+ bağlamını sorgular. COM+ bağlamından bir işlem bulsa System.Transactions da, yerel olan işlemleri yine de tercih ettiğini System.Transactionsunutmayın.
Birlikte çalışabilirlik düzeyleri
EnterpriseServicesInteropOption Numaralandırma aşağıdaki birlikte çalışabilirlik düzeyleri tanımlar —None, Full ve Automatic.
sınıfı, TransactionScope parametre olarak kabul EnterpriseServicesInteropOption eden oluşturucular sağlar.
Noneadından da anlaşılacağı gibi, bağlamlar ve işlem kapsamları arasında System.EnterpriseServices birlikte çalışabilirlik olmadığını belirtir. Oluşturduktan sonra bir TransactionScope nesnesi ile None, herhangi bir değişiklik Current COM + bağlamında yansıtılmaz. Benzer şekilde, COM+ bağlamındaki işlemde yapılan değişiklikler'e Currentyansıtılmaz. Bu, ek eşitleme gerektiremediğinden için System.Transactions en hızlı işlem modudur. Noneparametresi olarak kabul EnterpriseServicesInteropOption edilmeyen tüm oluşturucularla birlikte tarafından TransactionScope kullanılan varsayılan değerdir.
İşlemleri ortam işleminizle birleştirmek System.EnterpriseServices istiyorsanız veya Automatickullanmanız Full gerekir. Bu değerleri her ikisi de Hizmetleri bileşenleri olmadan denilen bir özelliği kullanır ve bu nedenle, Windows XP Service Pack 2 veya Windows Server 2003 üzerinde bunları kullanırken çalışıyor olması gerekir.
Fullve System.EnterpriseServices için System.Transactions ortam işlemlerinin her zaman aynı olduğunu belirtir. Bu, yeni System.EnterpriseServices bir işlem bağlamı oluşturulmasına ve bu bağlam için geçerli olması için geçerli olan işlemin uygulanmasına TransactionScope neden olur. Bu nedenle içindeki işlem Current , içindeki işlemle Transactiontamamen eşitleniyor. Yeni COM+ bağlamlarının oluşturulması gerekebileceğinden bu değer bir performans cezasına neden olur.
Automaticaş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, ile Automaticbile varsayılan bağlamda tarafından kullanılan System.Transactions iş parçacığı yerel depolamasında depolanan işlem için Currentdö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 gibi davranır Full , yeni bir COM + içeriği oluşturur.
Ayrıca, Current her ikisini de ayarlanmış Full ve Automatic, her iki mod yaptığından Current doğrudan ayarlanamaz. Ayarlanacak yapmaya Current doğrudan dışındaki oluşturma bir TransactionScope sonuçlanır bir InvalidOperationException. EnterpriseServicesInteropOption Numaralandırma değeri, hangi değerin kullanılacağını açıkça belirtmeyen yeni işlem kapsamları tarafından devralınır. Yeni bir oluşturursanız, örneğin, TransactionScope nesnesi ile Fullve sonra bir saniye oluşturun TransactionScope nesnesi ancak belirtmeyin bir EnterpriseServicesInteropOption değeri, ikinci TransactionScope nesne de sahip bir Full.
Özetle, yeni bir işlem kapsamı oluştururken aşağıdaki kurallar geçerlidir:
Current bir işlem olup olmadığını görmek için denetlendi. Bu onay sonuçlanır:
Bir kapsam olup olmadığını denetleyin.
Değerini bir kapsam ise EnterpriseServicesInteropOption kapsam başlangıçta oluşturulduğunda geçirilen numaralandırma denetlenir.
EnterpriseServicesInteropOption Numaralandırma olarak ayarlanırsaAutomatic, COM+ işlemi (System.EnterpriseServicesİşlem) yönetilen iş parçacığı yerel depolamadaki System.Transactions işlemden önceliklidir.
Değer olarak ayarlanırsaNoneSystem.Transactions, yönetilen iş parçacığı yerel depolamadaki işlem önceliklidir.
Değer ise Full, yalnızca bir işlem vardır ve bu bir COM+ işlemidir.
Oluşturucu tarafından geçirilen numaralandırmanın TransactionScope değeri TransactionScopeOption denetlendi. Bu, yeni bir işlem oluşturulması gerekip gerekmediğini belirler.
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 sabit listesi kullanılarak EnterpriseServicesInteropOption bir işlem gerektiren işlem kapsamı gösterilmektedir.
ES bağlamı | Hiçbiri | Otomatik | Tam |
---|---|---|---|
Varsayılan bağlamı | Varsayılan bağlamı | Varsayılan bağlamı | Yeni oluştur işlem bağlamı |
Varsayılan olmayan bağlamı | İstemcinin içeriği | Yeni işlem bağlamı oluşturma | Yeni işlem bağlamı oluşturma |
Aşağıdaki tabloda, belirli System.EnterpriseServices bir bağlam ve sabit listesi kullanılarak bir işlem gerektiren işlem kapsamı verildiğinde ortam işleminin EnterpriseServicesInteropOption ne olduğu gösterilmektedir.
ES bağlamı | Hiçbiri | Otomatik | Tam |
---|---|---|---|
Varsayılan bağlamı | ST | ST | ES |
Varsayılan olmayan bağlamı | ST | ES | ES |
Yukarıdaki tabloda:
ST, kapsamın ortam işleminin, mevcut olabilecek bağlam System.EnterpriseServices işlemlerinden ayrı olarak tarafından System.Transactionsyönetileceği anlamına gelir.
ES, kapsamın ortam işleminin bağlamın işlemiyle System.EnterpriseServices aynı olduğu anlamına gelir.