2

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

这与论坛主题相同的问题: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 托管时为每个工作流定义提供一个单独的实例存储。

我错过了什么?

4

1 回答 1

2

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

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

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

于 2012-09-05T18:23:58.047 回答