使用DynamicUpdateServices更新工作流实例

时间:2013-11-10 10:29:42

标签: c# workflow-foundation-4

确保将来可以将长时间运行的工作流实例升级到新的工作流定义的正确流程是什么。

我知道在继续执行任何新更改之前,我必须针对现有的XAML调用DynamicUpdateServices.PrepareForUpdate,以便稍后调用DynamicUpdateServices.CreateUpdateMap并生成我将用于升级现有工作流的映射文件实例

我真正清楚的是,在调用DynamicUpdateServices.PrepareForUpdate之后,您应该修改哪个工作流定义(XAML)文件。是调用DynamicUpdateServices.PrepareForUpdate后创建的(克隆的)XAML文件。还是原来的XAML文件?

似乎克隆的XAML文件应该是显而易见的选择,但是存在问题。克隆的XAML文件不包含ViewStateManager标记,这意味着您将丢失原始XAML中的所有布局。

另一方面,如果我使用原始XAML,那么我应该如何生成更新地图?

1 个答案:

答案 0 :(得分:1)

我联系了MS支持,最后了解它的工作原理。

我从来没有真正触及克隆的定义。我以前不理解的关键概念是DynamicUpdateServices.PrepareForUpdate()意图并不是真正准备XAML文件,而是准备WF运行时本身,以便它可以通过比较修改后的XAML与克隆来生成更新映射调用生成的副本(并在调用DynamicUpdateServices.PrepareForUpdate()时存储在内存中。所以典型的过程是:

  1. 部署工作流程定义(v1 xaml
  2. 修改工作流程定义(v2 xaml
  3. 部署工作流程定义(v2 xaml)*也可以在步骤5之后完成
  4. 针对DynamicUpdateServices.PrepareForUpdate()(来自源代码管理)
  5. 致电v1 xaml
  6. 生成更新地图DynamicUpdateServices.CreateUpdateMap()
  7. 将更新地图应用于从v1 xamlWorkflowApplication.Load(instance, updateMap)
  8. 保留并启动的现有工作流实例

    步骤4和5必须在同一个流程实例中完成(或者在大多数情况下,它只意味着在同一个主机中)。