Tek Aşamalı İşleme ve Yükseltilebilir Tek Aşamalı Bildirim kullanarak en iyi duruma getirme
Bu konuda, performansı iyileştirmek için altyapı tarafından System.Transactions sağlanan mekanizmalar açıklanmaktadır.
Liste promotable tek aşaması
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ındaki (işlem ve makine sınırları dahil) başka bir nesneye sağlanırsa veya başka bir dayanıklı kaynak yöneticisine kaydolacaksanız, System.Transactions altyapı MSDTC tarafından yönetilecek işlemi otomatik olarak yükseltir. MSDTC tarafından yönetilen bir işlem, altyapı tarafından yönetilen işlem kadar performans açısından System.Transactions değildir.
Performansı iyileştirmek için altyapı, System.Transactions farklı bir uygulama etki alanında, işlemde veya makinede bulunan tek bir uzak dayanıklı kaynağın bir MSDTC işlemine yükseltilmesine neden olmadan bir System.Transactions işleme katılmasını sağlayan Yükseltilebilir Tek Aşamalı Liste (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 kullanarak olasılığı 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 ilerletilmiş tek bir kalıcı kaynak listeleme için kullanılır. Liste gerektiği gibi ilerletilmiş, bu yöntem sağlar. Listeleme başarılı olursa, RM iç işlemini oluşturur ve işlemle System.Transactions ilişkilendirir. PSPE liste başarısız olursa, RM bunun yerine kullanarak listeleme EnlistDurable yöntemi. 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 işlemeye veya iptal etmeye yönelik System.Transactions çağrılar, yöntemi veya sırasıyla çağrılara SinglePhaseCommit dönüştürülerek Resource Manager'daki çağrılara Rollback dönüştürülür.
System.Transactions İşlem hiçbir zaman yükseltme gerektirmezse, işlem işlendiğinde RM bir SinglePhaseCommit bildirim alır. Daha sonra başlangıçta oluşturulan iç işlemi işleyebilir.
İşlemin System.Transactions ilerletilmesi gerekiyorsa (örneğin, birden çok RM'yi desteklemek için), System.Transactions arabirimin türetildiği arabirimde ITransactionPromoter yöntemini çağırarak Promote kaynak yöneticisini IPromotableSinglePhaseNotification bilgilendirir. 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.
Not
TransactionCommitted izlemeleri (ilerletilen işlemde 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, kaynak yöneticisi için 'proxy' olarak ad alanını kullanan System.Data dağıtılmış bir işleme yükseltmeyi 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şlemde EnlistPromotableSinglePhase listelemek için yöntemini çağırır. Ardından işlem hala yereldir ve işlemde EnlistPromotableSinglePhase başka tanıtılabilir liste olmadığından çağrı başarılı olur.
İkinci bağlantı CN2 çağırır olduğunda EnlistPromotableSinglePhase, ilgili başka bir promotable liste olduğundan çağrı başarısız olur. Bu nedenle, CN2'nin SQL'e geçirmek 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çağrıları Promote yöntemi ITransactionPromoter CN1 tarafından uygulanan arabirimi.
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şlemle birleştirebileceğ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 DTC dağıtılmış işlemine kaydedilir.
Tek aşaması yürütme en iyi hale getirme
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, kaynağın arabirimini kullanarak ISinglePhaseNotification bir kaynak yöneticisi uygulamanız ve veya EnlistVolatile yöntemini kullanarak EnlistDurable bir işlemde kaydolmanı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.
Bu yana ISinglePhaseNotification arabirimi türetilir IEnlistmentNotification arabirim, RM tek aşaması yürütme için uygun değilse, bunu iki aşaması yürütme bildirimleri almaya devam. RM'niz TM'den bir SinglePhaseCommit bildirim alırsa, işlemesi için gereken işi gerçekleştirmeyi denemeli ve parametredeki , Abortedveya yöntemini çağırarak Committedişlemin işlenip işlenmediğini veya InDoubt geri alınıp alınmadığını işlem yöneticisine SinglePhaseEnlistment bildirmelidir. Yanıtın Done liste bu aşamada üzerinde salt okunur semantiği anlamına gelir. Bu nedenle, değil yanıt Done ek olarak diğer yöntemleri.
Yalnızca bir geçici liste varsa ve dayanıklı bir liste yoksa, geçici liste SPC bildirimi alır. Geçici listeler varsa ve yalnızca bir dayanıklı liste varsa, geçici listeler 2PC alır. Tamamlandığında, kalıcı liste SPC alır.