使用相同的实例ID重新创建工作流实例

时间:2010-03-05 10:58:44

标签: .net workflow-foundation

我们有一些对象具有关联的工作流实例。使用GUID标识对象,GUID也是与对象关联的工作流实例的GUID。如果工作流定义发生了变化(工作流本身没有状态,并且编写它以支持以这种方式重新启动),我们需要重新启动(请参阅注释3,了解“重启”的含义)工作流实例。

通过调用Terminate上的WorkflowInstance执行重新启动,然后使用相同的GUID重新创建实例。奇怪的是,这可以用于其他所有尝试(奇怪的尝试 - 工作流程停止,但由于某种原因不会重新启动,甚至尝试 - 已经终止的工作流程被重新创建并成功启动。)

虽然我承认使用'秒针'GUID是非常廉价的标志(我们打算改变的东西),但我想知道为什么这不起作用。有什么想法吗?

注意:

  1. 终止的工作流实例在终止时被钝化(等待通知)。

  2. Terminate调用成功删除了该实例数据库中持久存储的数据。

  3. 我们正在使用'重新启动',其含义在WF的上下文中不太常见 - 不重新启动钝化的实例,但强制工作流从其定义的开头重新开始。

    < / LI>

    谢谢!

1 个答案:

答案 0 :(得分:0)

看来调用Terminate()非常粗暴地完成了工作流,甚至没有在根活动上调用Uninitialize()(在我们的情况下需要进行一些必要的清理)。

我们的解决方法是在工作流中抛出异常(处理'item available'事件时,因此可以通过在特殊队列上排列对象来触发'终止'),以便工作流终止并Uninitialize()被称为。