Bagikan melalui


Instans Alur Kerja Yang Tidak Bertahan

Ketika instans baru alur kerja dibuat yang mempertahankan statusnya di SqlWorkflowInstanceStore, host layanan membuat entri untuk layanan tersebut di penyimpanan instans. Selanjutnya, ketika instans alur kerja dipertahankan untuk pertama kalinya, SqlWorkflowInstanceStore menyimpan status instans saat ini. Jika alur kerja dihosting di Layanan Aktivasi Proses Windows, data penyebaran layanan juga ditulis ke penyimpanan instans saat instans disimpan untuk pertama kalinya.

Selama instans alur kerja belum dipertahankan, instans tersebut dalam keadaan tidak bertahan . Saat dalam status ini, instans alur kerja tidak dapat dipulihkan setelah daur ulang domain aplikasi, kegagalan host, atau kegagalan komputer.

Status Tidak Bertahan

Instans alur kerja tahan lama yang belum dipersistenkan tetap dalam keadaan tidak terpersisten dalam kasus berikut:

  • Host layanan mengalami crash sebelum instans alur kerja dipertahankan untuk pertama kalinya. Instans alur kerja tetap berada di penyimpanan instans dan tidak dipulihkan. Jika pesan berkorelasi tiba, instans alur kerja menjadi aktif lagi.

  • Instans alur kerja mengalami pengecualian sebelum dipertahankan untuk pertama kalinya. Bergantung pada UnhandledExceptionAction yang dikembalikan, skenario berikut akan terjadi:

    • UnhandledExceptionAction disetel ke Abort: Ketika pengecualian terjadi, informasi penyebaran layanan ditulis ke penyimpanan instans, dan instans alur kerja dikeluarkan dari memori. Instans alur kerja tetap dalam status tidak bertahan dan tidak dapat dimuat ulang.

    • UnhandledExceptionAction diatur ke Cancel atau Terminate: Ketika pengecualian terjadi, informasi penyebaran layanan ditulis ke penyimpanan instans, dan status instans aktivitas diatur ke Closed.

Untuk meminimalkan risiko mengalami instans alur kerja non-persisten yang tidak dimuat, sebaiknya lakukan persistensi pada alur kerja di awal siklus hidupnya.

Deteksi dan Penghapusan Instance Tidak Persisten

SqlWorkflowInstanceStore tidak menghapus instans alur kerja yang tidak bertahan dari penyimpanan instans. Ini juga tidak menghapus pemilik kunci kedaluwarsa yang memiliki instans alur kerja yang tidak bertahan yang terkait dengannya.

Kami menyarankan agar administrator secara berkala memeriksa penyimpanan instans untuk instans yang tidak bertahan. Administrator dapat menghapus instans tersebut dari penyimpanan instans selama mereka tahu bahwa alur kerja ini tidak akan menerima pesan yang berkorelasi. Misalnya, jika instans telah berada dalam database selama beberapa bulan dan diketahui bahwa alur kerja biasanya memiliki masa pakai beberapa hari, akan aman untuk mengasumsikan bahwa ini adalah instans yang diinisialisasi yang mengalami crash.

Untuk menemukan instans yang tidak bertahan di Penyimpanan Instans Alur Kerja SQL, Anda dapat menggunakan kueri SQL berikut:

  • Kueri ini menemukan semua instans yang belum dipertahankan, dan mengembalikan ID dan waktu pembuatan (disimpan dalam waktu UTC) untuk instans tersebut.

    select InstanceId, CreationTime
        from [System.Activities.DurableInstancing].[Instances]
        where IsInitialized = 0
    
  • Kueri ini menemukan semua instans yang belum dipertahankan, dan yang tidak dimuat, dan mengembalikan ID dan waktu pembuatan (disimpan dalam waktu UTC) untuk instans tersebut.

    select InstanceId, CreationTime
        from [System.Activities.DurableInstancing].[Instances]
        where IsInitialized = 0
            and CurrentMachine is NULL
    
  • Kueri ini menemukan semua instans yang ditangguhkan yang belum dipertahankan, dan mengembalikan ID, waktu pembuatan (disimpan dalam waktu UTC), alasan penangguhan, dan nama pengecualian untuk instans tersebut.

    select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName
        from [System.Activities.DurableInstancing].[Instances]
        where IsInitialized = 0
            and IsSuspended = 1
    

Gunakan hati-hati saat Anda menghapus instans yang tidak bertahan. Secara umum, aman untuk menghapus instans yang tidak permanen yang dibuat oleh WorkflowServiceHost apabila instans tersebut ditangguhkan atau tidak dimuat. Instans tertentu tersebut dapat dihapus dari penyimpanan dengan menghapusnya dari [System.Activities.DurableInstancing].[Instances] tampilan dengan menggunakan perintah SQL berikut, mengganti ID instans yang benar.

delete [System.Activities.DurableInstancing].[Instances]
    where InstanceId=’078a9bc4-ada5-4f9e-8cce-b0eb0009995f’

Peringatan

Kami tidak menyarankan untuk menghapus semua instans yang tidak bertahan karena ini termasuk instans yang baru saja dibuat dan belum dipertahankan.