Workflow 工作流基础与长期运行实例的向后兼容性 我最近加入了一个项目,工作流基础4被用来对业务流程建模。

Workflow 工作流基础与长期运行实例的向后兼容性 我最近加入了一个项目,工作流基础4被用来对业务流程建模。,workflow,versioning,workflow-foundation-4,Workflow,Versioning,Workflow Foundation 4,我们有一个设计工具,以便客户顾问可以定制工作流定义。我们还将工作流实例与定义一起持久化。工作流可以长时间运行(例如数月或可能数年) 我的问题是,如果我们不一定知道已经进行了哪些定制,哪些遗留工作流仍在运行中,那么我们如何管理每个版本的向后兼容性?我们正在从XAML加载,但即使对工作流定义进行看似微小的更改,也会阻止它们加载。迁移脚本是我最初的想法,但考虑到WF工作流的复杂性,它似乎并不平凡。首先,XOML是3.0;WF4使用直接向上的XAML 这样做有两种选择。这取决于是否需要升级正在运行的长期

我们有一个设计工具,以便客户顾问可以定制工作流定义。我们还将工作流实例与定义一起持久化。工作流可以长时间运行(例如数月或可能数年)


我的问题是,如果我们不一定知道已经进行了哪些定制,哪些遗留工作流仍在运行中,那么我们如何管理每个版本的向后兼容性?我们正在从XAML加载,但即使对工作流定义进行看似微小的更改,也会阻止它们加载。迁移脚本是我最初的想法,但考虑到WF工作流的复杂性,它似乎并不平凡。

首先,XOML是3.0;WF4使用直接向上的XAML

这样做有两种选择。这取决于是否需要升级正在运行的长期工作流,或者是否要更新工作流并将其用于所有新实例,同时保持当前实例在以前的版本上运行。让我们将这两个选项称为升级策略和多版本策略

Re多版本
我现在正在做这件事。本质上,您必须在AppDomain中隔离同一工作流的每个不同版本。从xaml反序列化或创建类型的
新的
实例是同一件事——它们都会导致将程序集加载到当前AppDomain中。如果工作流的v1在程序集A.1中定义,而工作流的v2在程序集A.2中定义,则如果不小心,可能会遇到绑定问题。在自己的AppDomain中隔离每个版本有助于降低发生这种情况的可能性

重新升级:

这目前不受支持,但有计划在(近期)的未来版本中包括这一点。罗恩·雅各布斯详细介绍了WF4期货。演示文稿中提到了三件事(我记得),即破坏构建的元数据错误、状态机错误,以及在执行期间为工作流提供升级路径。我可以告诉你,状态机是在最近发布的,我被告知元数据错误破坏了构建功能,很快也会出现。我认为升级路径功能也将很快推出。

我对此做了一些研究