Aracılığıyla paylaş


Süreklilik Katılımcıları

Kalıcılık katılımcısı, bir uygulama konağı tarafından tetiklenen bir kalıcılık işlemine (Kaydet veya Yükle) katılabilir. .NET Framework 4.6.1, kalıcılık katılımcısı oluşturmak için kullanabileceğiniz iki soyut sınıfla birlikte gelir: PersistenceParticipant ve PersistenceIOParticipant. Kalıcılık katılımcısı bu sınıflardan birinden türetilir, ilgili yöntemleri uygular ve ardından sınıfın bir örneğini WorkflowExtensions üzerindeki WorkflowServiceHost koleksiyonuna ekler. Uygulama konağı, bir iş akışı örneğini kalıcı hale eklerken bu tür iş akışı uzantılarını arayabilir ve uygun zamanlarda kalıcılık katılımcılarında uygun yöntemleri çağırabilir.

Aşağıdaki listede Kalıcılık alt sistemi tarafından gerçekleştirilen görevler, Kalıcı (Kaydet) işleminin farklı aşamalarında açıklanmaktadır. Kalıcı katılımcılar üçüncü ve dördüncü aşamalarda kullanılır. Katılımcı bir G/Ç katılımcısıysa (G/Ç işlemlerine de katılan bir kalıcılık katılımcısı), katılımcı altıncı aşamada da kullanılır.

  1. İş akışı durumu, yer işaretleri, eşlenen değişkenler ve zaman damgası gibi yerleşik değerleri toplar.

  2. İş akışı örneğiyle ilişkilendirilmiş uzantı koleksiyonuna eklenen tüm kalıcılık katılımcılarını toplar.

  3. Tüm kalıcılık katılımcıları CollectValues tarafından uygulanan yöntemi çağırır.

  4. Tüm kalıcılık katılımcıları MapValues tarafından uygulanan yöntemi çağırır.

  5. İş akışını kalıcılık deposuna kalıcı hale getir veya kaydet.

  6. Tüm süreklilik G/Ç katılımcılarında BeginOnSave yöntemini çağırır. Katılımcı G/Ç katılımcısı değilse, bu görev atlanır. İşlemin kalıcılık bölümü işlemselse, Transaction.Current özelliğinde sağlanır.

  7. Tüm kalıcılık katılımcılarının tamamlanmasını bekler. Tüm katılımcılar örnek verilerini kalıcı hale getirmede başarılı olursa, işlemi tamamlar.

Kalıcılık katılımcısı PersistenceParticipant sınıfından türetilir ve CollectValues ve MapValues yöntemlerini uygulayabilir. Kalıcılık G/Ç katılımcısı PersistenceIOParticipant sınıfından türetilir ve CollectValues ve MapValues yöntemlerini uygulamaya ek olarak BeginOnSave yöntemini de uygulayabilir.

Her aşama bir sonraki aşama başlamadan önce tamamlanır. Örneğin, değerler ilk aşamadaki tüm kalıcılık katılımcılarından toplanır. Ardından ilk aşamada toplanan tüm değerler, eşleme için ikinci aşamadaki tüm kalıcılık katılımcılarına sağlanır. Ardından birinci ve ikinci aşamalarda toplanan ve eşlenen tüm değerler üçüncü aşamada kalıcılık sağlayıcısına sağlanır ve bu şekilde devam eder.

Aşağıdaki listede, Yükleme işleminin farklı aşamalarında kalıcılık alt sistemi tarafından gerçekleştirilen görevler açıklanmaktadır. Kararlılık katılımcıları dördüncü aşamada kullanılır. Kalıcılık G/Ç katılımcıları (G/Ç işlemlerine de katılan kalıcılık katılımcıları) üçüncü aşamada da kullanılır.

  1. İş akışı örneğiyle ilişkilendirilmiş uzantı koleksiyonuna eklenen tüm kalıcılık katılımcılarını toplar.

  2. İş akışını süreklilik deposundan yükler.

  3. BeginOnLoad Tüm kalıcılık G/Ç katılımcılarını çağırır ve tüm kalıcılık katılımcılarının tamamlanmasını bekler. Kalıcılık oturumu işlemselse, Transaction.Current içinde işlem sağlanır.

  4. İş akışı örneğini kalıcılık deposundan alınan verilere göre belleğe yükler.

  5. Her bir kalıcılık katılımcısı için PublishValues çağırır.

Kalıcılık katılımcısı PersistenceParticipant sınıfından türetilir ve PublishValues yöntemini uygulayabilir. Kalıcılık G/Ç katılımcısı PersistenceIOParticipant sınıfından türetilir ve PublishValues yöntemini uygulamaya ek olarak BeginOnLoad yöntemini de uygulayabilir.

Bir iş akışı örneğini yüklerken kalıcılık sağlayıcısı bu örnekte bir kilit oluşturur. Bu, örneğin çok düğümlü bir senaryoda, birden fazla konak tarafından bir örneğin yüklenmesini engeller. Kilitlenmiş bir iş akışı örneğini yüklemeye çalışırsanız aşağıdaki gibi bir özel durum görürsünüz: " System.ServiceModel.Persistence.InstanceLockException: '00000000-0000-0000-0000-0000-00000-00000000000' kilidi alınamadığından istenen işlem tamamlanamadı". Bu hata aşağıdakilerden biri oluştuğunda oluşur:

  • Çok düğümlü bir senaryoda, örnek başka bir sunucu tarafından yüklenir. Bu tür çakışmaları çözmenin birkaç farklı yolu vardır: İşlemi kilidin sahibi olan düğüme iletmek ve yeniden denemek ya da yüklemeyi zorlayarak diğer konağın çalışmalarını kaydedememesine neden olmak.

  • Tek düğümlü bir senaryoda, konak çöktü. Ev sahibi yeniden başlatıldığında (işlem yenileme veya yeni bir kalıcılık sağlayıcı fabrikası oluşturma) yeni ev sahibi, kilidin süresi henüz dolmadığından eski ev sahibi tarafından hala kilitli olan bir örneği yüklemeye çalışır.

  • Tek düğümlü bir senaryoda ve söz konusu örnek bir noktada durduruldu ve farklı bir konak kimliğine sahip yeni bir kalıcılık sağlayıcısı örneği oluşturuldu.

Kilit zaman aşımı değerinin varsayılan değeri 5 dakikadır; çağrısı Loadyaparken farklı bir zaman aşımı değeri belirtebilirsiniz.

Bu Kısımda

Ayrıca bakınız