如何解决这个问题(在WF4):

我XAML创建一个工作流程,并开始它的几个例子,我有一个persistancestore和所有工作流程上坚持一个书签一半他们的工作流程。

现在我停止应用程序

如果我重新启动应用TE一切重新开始,EN很好地完成。

但是,如果我想改变正在运行的实例后的工作流定义是什么坚持?加载运行的工作流(即我能找到)的唯一途径是通过以下方式:

        WorkflowApplication wfapp = new WorkflowApplication(new WorkflowDefinition());
        wfapp.InstanceStore = new SqlWorkflowInstanceStore(connStr);

        wfapp.Load(wfGuid);

所以,你需要的工作流定义,如果它的持久化过程中发生了变化,事情可怕的错误。

什么是解决这个的最佳方式?

有帮助吗?

解决方案

此情况下是一个有点问题。有没有办法迁移年纪大了工作流定义为新的格式。我已经做了一些有限的测试和一些场景与添加/删除的活动,如尚未执行工作的罚款。但是,我也有去的情况严重问题,包括重新执行一个已完成的活动。

据我所知,有解决比跟踪XAML的版本,其他的问题没有好的办法/装配用于创建工作流程和检查,当你要重新启动工作流程,确定工作流程的版本使用

其他提示

许多相同的工作流程的版本必须共存。我的意思是,老实例与旧版本的工作流程来完成,而新的具有新的工作流程版本begining。 在我的情况下,我们有工作流服务。它是在配置,其中一台路由器描述哪些实例尝试执行顺序。如果一个实例无法启动与一个版本工作,下一个被尝试,等等。

另外,如果你的变化不涉及工作流程变量的变化,合同曝光,等等......新老工作流实例的版本可以在相同的工作流程版本上运行。你会知道,测试它。

这与其说是与Windows工作流的问题,因为它是SQL持久性服务。你可以创建自己的持久性服务,既可以通过支持旧的工作流程转化为新的工作流程或一些更抽象,像一个持久性服务,序列化为XML / JSON,一些可能更容易地支持一个反序列化处理这种情况,版本另一个版本。

有可能在WF4改变定义加载后持续WF实例 - 你必须分析和更改的XML文件的WF引擎存储。您应该创建两个相同的工作流程:与老版本和新版本,并给他们,以消除分歧比较。这必须在定义XML和用于存储工作流状态的复杂数据的XML来完成。与LinqToXML解析它会为你节省大量的时间,你必须确保你已经检查了所有的差异 - 如果有剩下的一个区别,妇联将无法加载。 有一个元素“ResumeData”,你会发现在WF状态XML,这是太重了解析,但好消息是,你可以简单地将其删除。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top