【问题标题】:How do I properly Load a Workflow after Pausing/Persisting it?暂停/持久化后如何正确加载工作流?
【发布时间】:2010-06-15 14:38:14
【问题描述】:

使用此MSDN Article 作为暂停和恢复的示例,人们会认为这将非常简单。这就是我“暂停”工作流程的方式...

LastWfGuid = workflow.Id;
workflow.Unload();

非常简单,它应该保存到实例存储(我已经在这两行之前设置),并且我确实在实例视图和实例表中看到了条目。当我准备好恢复工作流程时,我会这样做......

workflow = new WorkflowApplication( myActivity, myWfArgs );
workflow.InstanceStore = wfStore;
workflow.Load(LastWfGuid);

那时我收到一个InvalidOperationException,异常消息是...

Workflow inputs cannot be used with Load or LoadRunnableInstance, since they are only provided to new instances.

如果我无法加载之前保留的工作流,我该如何再次恢复它?我尝试简单地使用Persist() 代替Unload(),从外面看起来还不错,我没有收到任何异常。但是,工作流程继续运行,这不是我想要的。我想暂停然后恢复我的工作流程。

【问题讨论】:

    标签: c# persistence c#-4.0 workflow-foundation-4


    【解决方案1】:

    在创建用于加载现有工作流实例的 WorkflowApplication 时删除 myWfArgs 参数。像这样:

    workflow = new WorkflowApplication(myActivity);
    workflow.InstanceStore = wfStore;
    workflow.Load(LastWfGuid);
    

    【讨论】:

    • 只是出于好奇,这将如何解决我的负载问题?是否有理由阻止简历?
    • 这很棒,因为它可以满足我的需要。它会根据需要暂停和恢复。这种方法的唯一问题是我如何传递我需要的参数,或者它们在持久化时是状态的一部分?
    • 在启动期间传递给工作流的所有数据以及当时范围内的变量都会作为工作流状态的一部分进行保存和重新加载。
    • 有道理,在应用终止并再次执行后,我还能加载工作流吗?接下来我正在处理这个要求。
    • 是的,状态是使用 SqlWorkflowInstanceStore 保存在 SQL Server 数据库中的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多