0

为了确保长期运行的工作流实例可以在未来升级到新的工作流定义,应该遵循什么正确的流程。

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

我不太清楚的是在调用DynamicUpdateServices.PrepareForUpdate. 是调用后创建的(克隆的)XAML 文件吗DynamicUpdateServices.PrepareForUpdate?还是原始 XAML 文件?

看起来克隆的 XAML 文件应该是显而易见的选择,但是有一个问题。克隆的 XAML 文件不包含ViewStateManager标记,这意味着您会丢失原始 XAML 中的所有布局。

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

4

1 回答 1

1

我联系了 MS Support,终于了解它是如何工作的。

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

  1. 部署工作流定义 ( v1 xaml)
  2. 修改工作流定义 ( v2 xaml)
  3. 部署工作流定义 ( v2 xaml) * 也可以在第 5 步之后完成
  4. 反对(从源代码管理DynamicUpdateServices.PrepareForUpdate()中获取)v1 xaml
  5. 生成更新地图DynamicUpdateServices.CreateUpdateMap()
  6. 将更新映射应用于已持久化并从v1 xaml( WorkflowApplication.Load(instance, updateMap))开始的现有工作流实例

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

于 2013-11-21T06:04:36.610 回答