我正在评估 Workflow Foundation 4 或 4.5,并想知道如何在服务器重新启动时从实例存储中加载具有多个工作流定义的可运行实例?
“使用 InstanceStore.WaitForEvents 时,如果任何实例准备就绪,就会引发 HasRunnableWorkflowEvent 事件。并且,要调用 WorkflowApplication.LoadRunnableInstance (),我们需要创建一个新的 WorkflowApplication,并且它需要正确的工作流定义。它是当只有 1 个工作流实现时很容易。但是,如果有多种类型的工作流与同一个 InstanceStore 关联,并且因为 HasRunnableWorkflowEvent 没有关于将由 LoadRunnableInstance () 加载的就绪实例的任何其他信息,我们可以不知道我们必须为新的 WorkflowApplication 创建什么类型的实例。”
但答案表明:
The only way is to have a separate instance store for each workflow definition when hosting with WorkflowApplication.
我错过了什么吗?
最佳答案
您可以在单个商店中拥有多种工作流程定义,但您需要跟踪用于启动工作流程的工作流程定义。这是你的问题。在我当前的项目中,我们使用以下方法解决了这个问题。
我们在 WorkflowApplication 类周围使用包装类,并使用它来启动工作流。在此包装器中,在实际启动工作流之前,我们在数据库的表中写入 WorkflowInstance 记录,其中存储即将运行的 erkflow 的定义。除了一些其他信息之外,我们还有一个“persisted-id”列,它是由 WorkflowApplication 对象生成的 id。当我们启动工作流程时,我们不知道这个 ID,因此我们将此列留空。当正在运行的工作流实例被持久化时(可以通过处理 WorkflowApplication 对象上的事件来通知您),您可以检索由 WorkflowApplication 对象生成的 id。使用 persisted-id 更新您的 WorkflowInstance,当服务器重新启动时重新加载工作流时,您可以使用该 id 来检索工作流定义。
希望这有帮助。在这里就像一个魅力。
关于c# - 服务器重启时如何从实例存储中加载具有多个工作流定义的可运行实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286813/