2

我们有一个用于管理文档生命周期的业务逻辑。
这是使用 Workflow Foundation 4 和 WF Persistence 实现的。在工作流执行过程中,会在工作流中创建某些书签,并且计划任务会定期查找所有特定书签并恢复工作流(正在执行的活动会执行一些处理并再次为工作流添加书签,以便以后可以恢复工作流。 )

现在对于工作流的一些正在运行的实例,我们收到以下错误:

System.Runtime.DurableInstancing.InstanceNotReadyException 未处理
  Message=InstancePersistenceCommand 的执行被中断,因为实例 '99ce9413-5b17-4de0-a453-46891509e032' 尚未持久化到实例存储。
  源=System.Runtime.DurableInstancing
  堆栈跟踪:
       在 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult 结果)
       在 System.Runtime.DurableInstancing.InstancePersistenceContext.OuterExecute(InstanceHandle initialInstanceHandle,InstancePersistenceCommand 命令,Transaction 事务,TimeSpan 超时)
       在 System.Runtime.DurableInstancing.InstanceStore.Execute(InstanceHandle 句柄,InstancePersistenceCommand 命令,TimeSpan 超时)
       在 System.Activities.WorkflowApplication.PersistenceManager.Load(时间跨度超时)
       在 System.Activities.WorkflowApplication.LoadCore(时间跨度超时,布尔 loadAny)
       在 System.Activities.WorkflowApplication.Load(Guid instanceId,TimeSpan 超时)
       在 System.Activities.WorkflowApplication.Load(Guid instanceId)

以前相同的实例已成功加载。

我有几个与此异常相关的问题:

  • 我们什么时候可以得到这个异常?
  • 如果我们得到这个异常,是否有任何优雅的方式来处理它,以便以后可以恢复相同的实例?
  • 还有什么方法可以修复由于此异常而无法恢复的现有工作流实例?
4

1 回答 1

1

这是在您不断更改工作流程的开发机器上吗?我之前收到过这个错误,不得不清理我的持久性数据库。这是一个可以为您执行此操作的脚本。

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

让我知道这是否适合您!

于 2012-02-15T19:02:04.713 回答