C# 尝试恢复Windows工作流时出错

C# 尝试恢复Windows工作流时出错,c#,asp.net,workflow-foundation-4,guid,C#,Asp.net,Workflow Foundation 4,Guid,尝试使用以下代码恢复工作流时: public WorkflowApplication LoadInstance(Guid instanceId) { if (this.instances.ContainsKey(instanceId)) return this.instances[instanceId]; WorkflowApplication instance = new WorkflowApplication(new

尝试使用以下代码恢复工作流时:

    public WorkflowApplication LoadInstance(Guid instanceId)
    {
        if (this.instances.ContainsKey(instanceId))
            return this.instances[instanceId];

        WorkflowApplication instance = new WorkflowApplication(new Tarpon.Workflows.CreateContact());

        //  Create Persistable Workflow           
        SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(ConfigurationManager.ConnectionStrings["WorkflowPersistance"].ConnectionString);
        store.HostLockRenewalPeriod = new TimeSpan(0, 0, 5);
        instance.InstanceStore = store;

        //  Load Instance
        instance.Completed += OnWorkflowCompleted;
        instance.Idle += OnIdle;
        instance.PersistableIdle += OnIdleAndPersistable;
        instance.Aborted += OnAborted;
        instance.Load(instanceId);

        //  Save instance in list of running instances
        this.instances.Add(instance.Id, instance);       // ERROR IS THROWN HERE

        return instance;
    }
我在“this.instances.Add(instance.Id,instance)行中获取并出错:

我试图在上面的代码中降低HostLockRenewalPeriod,并添加了下面的代码,希望能够禁用实例上的锁,但没有效果。它似乎也从来没有破译过下面的代码。每次经过Load()方法,我都会得到上面的错误

    public PersistableIdleAction OnIdleAndPersistable(WorkflowApplicationIdleEventArgs e)
    {
        instances.Remove(e.InstanceId);
        return PersistableIdleAction.Unload;
    }
这段代码似乎有一半时间可以正常工作,但另一半时间无法正确恢复其工作流。
有人知道我可以做些什么来正确地移除锁,而不必重新编写所有这些功能吗?

我没有看到
实例。在这里运行
实例。ResumeBookmark
,您需要它来触发任何与执行相关的事件,例如PersistableIdle。

实际上,当我在开发中看到这个错误时,它只意味着我需要清理我的持久性数据库。您可以使用已存在的存储过程来删除持久化工作流。

尝试创建一个
WorkflowIdleBehavior
对象,并将其
TimeToUnload
设置为零。有关更多详细信息,请参阅。

请参阅描述持久性和瞬间存储确认

这段代码是从文章中复制的,我认为它可能会帮助您:

关键是需要在开始时执行的CreateWorkflowOwnerCommand。当您使用CreateWorkflowOwnerCommand时,请确保不要忘记DeleteWorkflowOwnerCommand,否则所有工作流将由所有者锁定,并且无法由另一个SqlWorkflowInstanceStore重新加载


在instance.Load()之后添加instance.Run()时,我仍然会收到相同的错误。我应该使用instance.Run()而不是Load吗?这里的信息不太充分-我已经在博客中对此进行了说明,所以请查看。。。
    public PersistableIdleAction OnIdleAndPersistable(WorkflowApplicationIdleEventArgs e)
    {
        instances.Remove(e.InstanceId);
        return PersistableIdleAction.Unload;
    }
var instanceStore = new SqlWorkflowInstanceStore(connStr); 
var instanceHandle = instanceStore.CreateInstanceHandle();
var createOwnerCmd = new CreateWorkflowOwnerCommand();
var view = instanceStore.Execute(instanceHandle, createOwnerCmd, TimeSpan.FromSecond(30));
instanceStore.DefaultInstanceOwner = view.InstanceOwner; 
// Do whatever needs to be dome with multiple WorkflowApplications 
var deleteOwnerCmd = new    DeleteWorkflowOwnerCommand();
instanceStore.Execute(instanceHandle, deleteOwnerCmd, TimeSpan.FromSeconds(30));