Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konuda, performansı iyileştirmek için altyapı tarafından System.Transactions sağlanan mekanizmalar açıklanmaktadır.
Terfi Edilebilir Tek Fazlı Listeleme
Altyapı, System.Transactions tek bir uygulama etki alanı içinde en fazla tek bir dayanıklı kaynak veya birden çok geçici kaynak içeren bir işlemi yönetmektedir. System.Transactions Altyapı yalnızca uygulama içi etki alanı çağrılarını kullandığından en iyi aktarım hızını ve performansı verir.
Ancak, işlem aynı bilgisayardaki başka bir uygulama etki alanında (işlem ve makine sınırları arasında) başka bir nesneye sağlanırsa veya başka bir dayanıklı kaynak yöneticisini devreye almak isterseniz, System.Transactions altyapısı işlemi MSDTC tarafından yönetilecek şekilde otomatik olarak yükseltir. MSDTC tarafından yönetilen bir işlem, System.Transactions altyapısı tarafından yönetilen işlem kadar performanslı değildir.
Performansı iyileştirmek amacıyla System.Transactions altyapısı, farklı bir uygulama etki alanında, işlemde veya makinada yer alan tek bir uzak dayanıklı kaynağın bir System.Transactions işleme katılmasını ve bunun bir MSDTC işlemine yükseltilmesine neden olmadan gerçekleştirilmesini sağlayan Yükseltilebilir Tek Aşamalı Katılım (PSPE) sağlar. Bu kaynak yöneticisi (RM), gerekirse daha sonra dağıtılmış bir işleme (veya MSDTC işlemine) yükseltilebilen bir işlemi barındırabilir ve "sahibi" olabilir. Bu, MSDTC'yi kullanma şansını azaltır.
Bu belirli kaynak yöneticisinin genellikle kendi iç dağıtılmış olmayan işlemleri vardır ve bu işlemlerin çalışma zamanında dağıtılmış işlemlere dönüştürülmesini desteklemesi gerekir. Örneğin, SQL Server 2005 böyle bir kaynak yöneticisidir. Böyle bir durumda altyapı, System.Transactions yalnızca yükseltme gereksinimine yönelik işlemi izleyerek pasif bir yönetim rolü üstlenir. Altyapı ve kaynak yöneticisi arasındaki System.Transactions etkileşimi desteklemek için, ikincisinin arabirimini IPromotableSinglePhaseNotificationuygulaması gerekir.
EnlistPromotableSinglePhase yöntemi, daha sonra ilerletilebilen tek bir dayanıklı kaynağı listelemek için kullanılır. Bu yöntem, kaydın gerektiğinde yükseltilmesini sağlar. Kaydetme başarılı olursa, RM kendi iç işlemini oluşturur ve bu işlemi System.Transactions işlemiyle ilişkilendirir. PSPE listesi başarısız olursa, RM bunun yerine yöntemini kullanarak EnlistDurable kaydolmalıdır. PSPE'ye kaydetme hataları, işlem zaten dağıtılmış bir işlem olduğunda veya başka bir RM zaten bir PSPE listesi gerçekleştirdiğinde oluşabilir
Kaydolduktan sonra, istemciler tarafından işlemi gerçekleştirmeye veya iptal etmeye yönelik System.Transactions çağrılar, sırasıyla SinglePhaseCommit veya Rollback yöntemleri kullanılarak Resource Manager çağrılarına dönüştürülür.
System.Transactions İşlem hiçbir zaman yükseltme gerektirmezse, işlem onaylandığında RM, bir SinglePhaseCommit bildirim alır. Daha sonra başlangıçta oluşturulan iç işlemi işleyebilir.
İşlemin System.Transactions yükseltilmesi gerekiyorsa (örneğin, birden çok RM'yi desteklemek için), System.Transactions arabiriminde Promote yöntemini çağırarak, ITransactionPromoter arabiriminden türetilen kaynak yöneticisine IPromotableSinglePhaseNotification bildirir. Kaynak yöneticisi daha sonra işlemi yerel bir işlemden (günlüğe kaydetme gerektirmeyen) bir DTC işlemine katılabilen bir işlem nesnesine dönüştürür ve bunu zaten yapılan işle ilişkilendirir. İşlemin işlemesi istendiğinde, işlem yöneticisi yine de bildirimi kaynak yöneticisine gönderir SinglePhaseCommit ve bu bildirim, yükseltme sırasında oluşturduğu dağıtılmış işlemi işler.
Uyarı
İzlemeler TransactionCommitted (yüksek seviyeye yükseltilmiş işlemde bir commit çağrıldığında oluşturulur) DTC işleminin etkinlik kimliğini içerir.
Yönetim yükseltmesi hakkında daha fazla bilgi için bkz. İşlem Yönetimi Yükseltme.
İşlem Yönetimi Yükseltme Senaryosu
Aşağıdaki senaryo, System.Data ad alanını kaynak yöneticisi için 'aracı' olarak kullanarak bir işlemin dağıtılmış bir işleme nasıl yükseltileceğini gösterir. Bu senaryoda, işlemde yer alan CN1 adlı veritabanıyla zaten bir System.Data bağlantı olduğu varsayılır ve uygulama CN2 adlı başka bir System.Data bağlantı eklemek ister. İşlem, tam dağıtılmış iki aşamalı işleme işlemi olarak DTC'ye yükseltilmelidir.
Bu senaryoda,
CN1, işleme katılmak için EnlistPromotableSinglePhase yöntemini çağırır. Ardından işlem hala yereldir ve işlemde başka tanıtılabilir katılım olmadığından EnlistPromotableSinglePhase çağrısı başarılı olur.
İkinci bağlantıda CN2 EnlistPromotableSinglePhase çağrısı yapıldığında, başka bir tanıtılabilir katılım söz konusu olduğundan, çağrı başarısızlıkla sonuçlanır. Bu nedenle, CN2'nin SQL'e iletmek için bir DTC işlemi alması gerekir. Bunu yapmak için, SQL'e verilebilen işlemin biçimini oluşturmak için sınıfı tarafından TransactionInterop sağlanan yöntemlerden birini kullanır.
System.Transactions Promote CN1 tarafından uygulanan arabirimde ITransactionPromoter yöntemini çağırır.
Bu noktada, CN1 SQL 2005 ve'e System.Dataözgü bir mekanizma kullanarak işlemi ilerletir.
yönteminden Promote döndürülen değer, işlem için bir yayma belirteci içeren bir bayt dizisidir. System.Transactions bu yayma belirtecini yerel işleme entegre edebileceği bir DTC işlemi oluşturmak için kullanır.
Bu noktada CN2 yönteminden birini TransactionInterop çağırarak alınan verileri kullanarak işlemi SQL'e geçirebilir.
Şimdi, her ikisi de Dağıtılmış İşlem Koordinatörü (DTC) tarafından dağıtılmış bir işlema dâhil edilir.
Tek Aşamalı Taahhüt İyileştirme
Tüm güncelleştirmeler açık bir koordinasyon olmadan yapıldığından, Tek Aşamalı İşleme protokolü çalışma zamanında daha verimlidir. Bu iyileştirmeden yararlanmak için, kaynak için ISinglePhaseNotification arabirimini kullanarak bir kaynak yöneticisi uygulamanız ve bir işleme EnlistDurable veya EnlistVolatile yöntemiyle katılmanız gerekir. Özel olarak, EnlistmentOptions parametresi tek bir aşama işlemenin gerçekleştirileceğinden emin olmak için buna eşit None olmalıdır.
c0 arabirimi c1 arabiriminden türetildiğinden, RM'niz tek aşamalı taahhüt için uygun değilse bile, iki aşamalı taahhüt bildirimlerini almaya devam edebilir. RM'niz TM'den bir SinglePhaseCommit bildirim alırsa, işlem için gereken işleri yapmaya çalışmalı ve işlemin işlenip işlenmediğini ya da geri alınıp alınmadığını işlem yöneticisine bildirmek için Committed parametresi üzerinde Aborted, InDoubt veya SinglePhaseEnlistment yöntemini çağırarak işlem yöneticisini bilgilendirmelidir. Bu aşamada kayıttaki bir Done yanıtı, salt okunur anlamlar taşır. Bu nedenle, diğer yöntemlerin hiçbirine ek olarak yanıt Done vermemelisiniz.
Yalnızca bir geçici liste varsa ve dayanıklı bir liste yoksa, geçici liste SPC bildirimi alır. Değişken katılımlar varsa ve yalnızca bir kalıcı katılım varsa, değişken katılımlar 2PC alır. Tamamlandığında, dayanıklı liste SPC alır.