确保将来可以将长时间运行的工作流实例升级到新的工作流定义的正确流程是什么。
我知道在继续执行任何新更改之前,我必须针对现有的XAML调用DynamicUpdateServices.PrepareForUpdate
,以便稍后调用DynamicUpdateServices.CreateUpdateMap
并生成我将用于升级现有工作流的映射文件实例
我真正清楚的是,在调用DynamicUpdateServices.PrepareForUpdate
之后,您应该修改哪个工作流定义(XAML)文件。是调用DynamicUpdateServices.PrepareForUpdate
后创建的(克隆的)XAML文件。还是原来的XAML文件?
似乎克隆的XAML文件应该是显而易见的选择,但是存在问题。克隆的XAML文件不包含ViewStateManager
标记,这意味着您将丢失原始XAML中的所有布局。
另一方面,如果我使用原始XAML,那么我应该如何生成更新地图?
答案 0 :(得分:1)
我联系了MS支持,最后了解它的工作原理。
我从来没有真正触及克隆的定义。我以前不理解的关键概念是DynamicUpdateServices.PrepareForUpdate()
意图并不是真正准备XAML文件,而是准备WF运行时本身,以便它可以通过比较修改后的XAML与克隆来生成更新映射调用生成的副本(并在调用DynamicUpdateServices.PrepareForUpdate()
时存储在内存中。所以典型的过程是:
v1 xaml
)v2 xaml
)v2 xaml
)*也可以在步骤5之后完成DynamicUpdateServices.PrepareForUpdate()
(来自源代码管理)v1 xaml
DynamicUpdateServices.CreateUpdateMap()
v1 xaml
(WorkflowApplication.Load(instance, updateMap)
)步骤4和5必须在同一个流程实例中完成(或者在大多数情况下,它只意味着在同一个主机中)。