2010-03-05 70 views
0

我们有一些对象有关联的工作流实例。对象用GUID标识,GUID也是与对象关联的工作流实例的GUID。我们需要重新启动(见注3“重启”的意思)的工作流实例,如果工作流定义改变(没有在工作流本身没有状态,并写入支持重新启动以这种方式)。重新创建一个工作流实例使用相同的实例ID

重新启动是通过调用TerminateWorkflowInstance执行,然后使用相同的GUID重新创建实例。怪异的是,这部作品所有其他尝试(奇怪的尝试 - 工作流已停止,但由于某种原因无法重新启动,甚至企图 - 已经终止工作流程重新启动成功)。

尽管我承认使用“二手”的GUID是非凡的便宜(和东西我们打算改变),我想知道这是为什么不工作的标志。有任何想法吗?

NOTES:

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

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

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

谢谢!

回答

0

看起来,调用Terminate()非常残忍地完成工作流程,甚至没有调用Uninitialize()上的根活动(在我们的例子中需要进行一些清理)。

我们的解决方法是在工作流程中引发异常(处理'物品可用'事件时,因此'终止'可以通过将特定队列中的物品排入队列来触发),因此工作流程会死亡并调用Uninitialize()

相关问题