如何在服务器重新启动时从实例存储中加载具有多个工作流定义的可运行实例

我正在评估Workflow Foundation 4或4.5,并想知道如何在服务器重启时从实例存储中加载具有多个工作流定义的可运行实例?

这是与论坛主题相同的问题: http : //social.msdn.microsoft.com/Forums/en-US/wfprerelease/thread/b8d5ed34-054a-4e55-88e1-cd430ac42110? prof= required

“当使用InstanceStore.WaitForEvents时,如果任何实例准备就绪,则会引发HasRunnableWorkflowEvent事件。而且,要调用WorkflowApplication.LoadRunnableInstance(),我们需要创建一个新的WorkflowApplication,它需要正确的工作流程定义。只有1个工作流实现。但是,如果有多个类型的工作流与同一个InstanceStore相关联,并且因为HasRunnableWorkflowEvent在将由LoadRunnableInstance()加载的就绪实例上没有任何其他信息,我们无法知道我们必须为新的WorkflowApplication创建什么类型的实例。“

但答案表明:

唯一的方法是在使用WorkflowApplication进行托管时为每个工作流定义创建单独的实例存储。

我错过了什么?

您可以在单个商店中拥有多种工作流程定义,但需要跟踪用于启动工作流程的工作流程定义。 这是你的问题。 在我目前的项目中,我们使用以下方法解决了这个

我们在WorkflowApplication类周围使用包装类,并使用它来启动工作流。 在这个包装器中,在我们实际启动工作流之前,我们在数据库的表中编写WorkflowInstance记录,在该表中我们存储即将运行的eorkflow的定义。 除了一些其他信息,我们还有一个’persisted-id’列,它是WorkflowApplication对象生成的id。 我们在启动工作流程时不知道此ID,因此我们将此列留空。 当持久运行的工作流实例(可以通过处理WorkflowApplication对象上的事件来通知您)时,可以检索WorkflowApplication对象生成的id。 使用persisted-id更新WorkflowInstance,并在服务器重新启动时重新加载工作流时,您可以使用id来检索工作流定义。

希望这可以帮助。 在这里工作就像一个魅力。