我们有一些对象具有关联的工作流实例。使用GUID标识对象,GUID也是与对象关联的工作流实例的GUID。如果工作流定义发生了变化(工作流本身没有状态,并且编写它以支持以这种方式重新启动),我们需要重新启动(请参阅注释3,了解“重启”的含义)工作流实例。
通过调用Terminate
上的WorkflowInstance
执行重新启动,然后使用相同的GUID重新创建实例。奇怪的是,这可以用于其他所有尝试(奇怪的尝试 - 工作流程停止,但由于某种原因不会重新启动,甚至尝试 - 已经终止的工作流程被重新创建并成功启动。)
虽然我承认使用'秒针'GUID是非常廉价的标志(我们打算改变的东西),但我想知道为什么这不起作用。有什么想法吗?
注意:
终止的工作流实例在终止时被钝化(等待通知)。
Terminate
调用成功删除了该实例数据库中持久存储的数据。
我们正在使用'重新启动',其含义在WF的上下文中不太常见 - 不重新启动钝化的实例,但强制工作流从其定义的开头重新开始。
< / LI> 醇>谢谢!
答案 0 :(得分:0)
看来调用Terminate()
非常粗暴地完成了工作流,甚至没有在根活动上调用Uninitialize()
(在我们的情况下需要进行一些必要的清理)。
我们的解决方法是在工作流中抛出异常(处理'item available'事件时,因此可以通过在特殊队列上排列对象来触发'终止'),以便工作流终止并Uninitialize()
被称为。