Aracılığıyla paylaş


Kurtarma İşlemi

Kaynak yöneticisi, kaynak hatasından sonra işlem katılımcısını yeniden listeleyerek bir işlemdeki dayanıklı listelemelerin çözülmesini kolaylaştırır.

Kurtarma İşlemi

Kalıcı olarak kaydetmek istediğiniz ve daha sonra kurtarma için uygun olabilecek bir kaynağı (arabirimin bir IEnlistmentNotification uygulamasıyla açıklanmıştır) eklemek için EnlistDurable yöntemini çağırmanız gerekir. Ayrıca, bir kaynak hatası durumunda işlemin katılımcısını tutarlı bir şekilde etiketlemek için kullanılan bir kaynak yöneticisi tanımlayıcısı ile EnlistDurable yöntemini sağlamanız gerekir. Bu nedenle, ilk Enlist çağrısına sağlanan Guid, kurtarma sırasında yapılan çağrısındaki Reenlist parametresi ile aynı olmalıdır. Aksi takdirde, TransactionException atılır. Dayanıklı listelemeler hakkında daha fazla bilgi için bkz. Kaynakları bir İşlemde Katılımcı Olarak Listeleme.

2PC protokolünün hazırlama aşamasında (1. aşama), dayanıklı kaynak yöneticisinin uygulamanız Prepare bildirimini aldığında, bu aşamada hazırlama kaydını günlüğe kaydetmesi gerekir. Kayıt, taahhüt sırasında işlemi tamamlamak için gereken tüm bilgileri içermelidir. Hazırlama kaydına daha sonra kurtarma sırasında, RecoveryInformation geri çağırma özelliği alınarak erişilebilir. Kayıt günlüğünün Prepare yöntemi içinde yapılması gerekmez, çünkü RM bunu bir çalışan iş parçacığında gerçekleştirebilir.

Kurtarma işlemi aşağıdaki iki adımdan oluşur:

1. Adım - Yeniden Listele

Kaynak yöneticisi, şüpheli olan her liste için bilgi hazırlama kaydını inceler. Bu, birinci aşamada bildirimde RecoveryInformation kaynak yöneticisine geçirilen PreparingEnlistment geri çağırma özelliğinin Prepare incelenmesiyle yapılır.

İncelediği her bir kayıt için, işlem yöneticisi üzerinde Reenlist çağrılır. Bu yöntem, kaynak yöneticisini tanımlayan benzersiz bir Guid ve listeleme bilgilerini içeren bir bayt dizisini aktarır. Yeni Enlistment bir nesne döndürülür. Yeniden listeleme bir özel durumla başarısız olursa kaynak yöneticisinin daha sonra yeniden denemesi gerekir.

Yöntemini yalnızca bir kaynak yöneticisi hatadan yeniden başlatıldığında çağırmalısınız Reenlist . Ayrıca, yalnızca iki aşamalı işlemenin ilk Hazırlama aşamasında bir kaynak yöneticisi tarafından kayıt altına alınan çözümlenmemiş işlemleri tekrar listedekilere dahil etmeniz gerekir. Bu yöntemi geçersiz zamanlarda çağırma girişimi hatalı sonuçlara neden olabilir.

Bir katılımcı bu yöntem kullanılarak yeniden listelendiğinde, işlemin sonucuna karşılık gelen aşama 2 yöntemleri IEnlistmentNotification (, CommitRollback veya InDoubt ) uygun şekilde çağrılır.

2. Adım - Kurtarmayı tamamlama

Tüm yeniden listelemeler tamamlandığında, kaynak yöneticisi yöntemini çağırır RecoveryComplete . Bu yöntem kurtarma işlemini tamamlar ve işlem yöneticisine kaynak yöneticisinin artık şüpheye bağlı işlemleri olmadığını bildirir. Bunu yaparak, kaynak yöneticisi Reenlist yöntemini yeniden çağırmayacağını garanti eder.

Yeni işlemlere kaydolmadan önce tüm şüpheli işlemleri çözümlemek için kaynak yöneticisi gerekmez. İlk adım, kaynak yöneticisi işlem yöneticisiyle bir ilişki kurduktan sonra herhangi bir zamanda gerçekleştirilebilir, ancak çağrıldıktan sonra RecoveryComplete (2. adım); 1. adım yeniden gerçekleştirilemez. 2. adım, işlemlerin sonucunu etkilemeden birden çok kez tekrarlanabilir.