我最近加入了一个项目,其中Workflow Foundation 4.0用于建模业务流程。
我们有一个设计师工具,以便客户顾问可以自定义工作流程定义。我们还将工作流实例与定义一起保留。工作流程可以长期运行(例如数月或可能数年)。
我的问题是,我们如何管理每个版本的向后兼容性,因为我们不一定知道已经进行了哪些自定义以及哪些旧版工作流程仍处于运行状态?我们正在从XAML加载,但即使对工作流定义进行看似微小的更改也会阻止它们加载。迁移脚本是我最初的想法,但鉴于WF工作流程的复杂性,它似乎并非易事。
答案 0 :(得分:3)
首先,XOML是3.0; WF4使用直接XAML。
这样做有两种选择。这取决于您是否需要升级正在运行的长时间工作流,或者是否要更新工作流并将其用于所有新实例,同时保持当前实例在先前版本上运行。让我们将这两个选项称为升级和多元化策略。
重新多元化:
我现在正在这样做。实质上,您必须隔离AppDomain中相同工作流的每个不同版本。从xaml反序列化或创建类型的new
实例是相同的 - 它们都导致程序集被加载到当前的AppDomain中。如果在程序集A.1中定义了工作流的v1,并且在程序集A.2中定义了工作流的v2,则在不小心的情况下可能会遇到绑定问题。隔离其自己的AppDomain中的每个版本有助于减少发生这种情况的可能性。
重新升级:
目前尚未得到支持,但有计划将其纳入(近期)未来版本中。 Ron Jacobs gave a presentation at PDC10 last October详细介绍了WF4期货。演示文稿中提到了三件事(我记得) - 元数据错误打破了构建,状态机,并为执行期间的工作流程提供了升级路径。我可以告诉你,状态机是在最近的Platform Update中发布的,我被告知元数据错误 - 中断 - 构建功能即将推出。我假设升级路径功能即将推出。
答案 1 :(得分:3)