2

我們擁有管理文檔生命週期的業務邏輯。
這是使用Workflow Foundation 4和WF Persistence實現的。 在執行工作流程期間,在工作流程中創建了某些書籤,並且計劃任務定期查找所有特定書籤並恢復工作流程(正在執行的活動執行一些處理並再次爲工作流程添加書籤,以便可以繼續工作流程。後來)什麼可能導致DurableInstancing.InstanceNotReadyException,我該如何解決它?

現在對於一些工作流程的運行情況,我們收到以下錯誤:

 
System.Runtime.DurableInstancing.InstanceNotReadyException was unhandled 
    Message=The execution of an InstancePersistenceCommand was interrupted because the instance '99ce9413-5b17-4de0-a453-46891509e032' has not yet been persisted to the instance store. 
    Source=System.Runtime.DurableInstancing 
    StackTrace: 
     at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result) 
     at System.Runtime.DurableInstancing.InstancePersistenceContext.OuterExecute(InstanceHandle initialInstanceHandle, InstancePersistenceCommand command, Transaction transaction, TimeSpan timeout) 
     at System.Runtime.DurableInstancing.InstanceStore.Execute(InstanceHandle handle, InstancePersistenceCommand command, TimeSpan timeout) 
     at System.Activities.WorkflowApplication.PersistenceManager.Load(TimeSpan timeout) 
     at System.Activities.WorkflowApplication.LoadCore(TimeSpan timeout, Boolean loadAny) 
     at System.Activities.WorkflowApplication.Load(Guid instanceId, TimeSpan timeout) 
     at System.Activities.WorkflowApplication.Load(Guid instanceId) 

以前相同的情況下,已成功加載。

我有幾個與此相關的異常問題:

  • 我們什麼時候能得到這個例外?
  • 如果我們得到這個異常,是否有處理它的優雅方式,以便稍後可以恢復相同的實例?
  • 還有什麼方法可以修復由於此異常而無法恢復的現有工作流實例嗎?

回答

0

這是你的開發機器中,你一直在更改工作流程嗎?我以前收到這個錯誤,不得不清理我的持久性數據庫。這是一個腳本,將爲您做到這一點。

use [AppFabricPersistenceStore] 

set nocount on 

declare @InstanceId uniqueidentifier 
declare @SurrogateInstanceId bigint 

declare csr cursor fast_forward for 
    select InstanceId from [System.Activities.DurableInstancing].Instances 

open csr 
fetch next from csr into @InstanceId 

while @@fetch_status = 0 
begin 
    (
     select @SurrogateInstanceId = SurrogateInstanceId 
     from [System.Activities.DurableInstancing].InstancesTable i 
     where i.Id = @InstanceId 
    ) 

    execute [System.Activities.DurableInstancing].DeleteInstance @SurrogateInstanceId 

    fetch next from csr into @InstanceId 
end 

close csr 
deallocate csr 

讓我知道這是否適合您!

相關問題