3

我真的在这里遇到一个非常不寻常的问题。我们刚刚将开发堆栈升级到 Visual Studio 2012 / .NET 4.5。

我们想升级到最新版本的 Workflow Foundation (4.5),这意味着也要升级 SQL 工作流实例存储模式,以便我们可以使用新功能,例如并行版本控制。

首先,我首先在以下位置运行随 .NET 4.5 安装的架构升级脚本:C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en\SqlWorkflowInstanceStoreSchemaUpgrade.sql

然后我运行了我的工作流程测试,一切正常。

下一步是将架构和数据更改合并到我们的 SQL Server 数据库项目(VS 2012 中的新项目)中,以便这些更改将作为我们构建过程的一部分自动构建和部署。

我对更新后的数据库实例与数据库项目进行了模式比较,识别并导入了所有模式更改,并更新了我们的参考数据脚本,以便 SqlWorkflowInstanceStoreVersion 表具有正确的值。

然后我发布了该项目,这意味着目标数据库被删除、重新创建并填充了默认参考数据(包括商店版本行)。

我再次运行了我的工作流测试,这次工作流测试都超时了,等待工作流线程返回。PersistableIdle 处理程序被调用到 Unload,但 Unloaded 处理程序从未被调用,所以现在有些事情搞砸了。

这显然与重新创建数据库这一事实有关,但我在 VS 2012 中使用 Schema Compare 工具看不到任何差异。

在解决此问题之前,我们无法进一步使用 WF 4.5 功能,有人知道这里可能发生了什么吗?

4

1 回答 1

1

不确定您是否找到了解决方案,但我认为以下信息可能会帮助其他人解决升级问题。

这篇 MSDN 文章暗示了就地升级的问题之一: What's New in Windows Workflow Foundation in .NET 4.5

.NET Framework 4.5 中引入的新 Windows Workflow Foundation 功能不适用于针对以前版本的框架的项目。如果将面向 .NET Framework 4.5 的项目重新定位到该框架的早期版本,则可能会出现几个问题。

C# 表达式将在设计器中替换为消息Value was set in XAML。

会发生许多构建错误,包括以下错误。

文件格式与当前定位框架不兼容。要转换文件格式,请明确保存文件。保存文件并重新打开设计器后,此错误消息将消失。

升级 SQL 持久性存储似乎可以做到这一点,因此必须针对 .Net 4.5 重新编译工作流,否则由于它支持版本控制,因此它在尝试与持久性存储进行通信时挂起。

在您的情况下可能没有必要,但我们还必须创建更新映射来“升级”活动定义和运行实例。MSDN 在此提供了一篇长文: 如何:更新正在运行的工作流实例的定义

动态更新参考也很有用: 动态更新

这是一个相当复杂的过程,但之后一切都重新开始了。

您可能还会发现这很有用:如何:并排托管工作流的多个版本

于 2015-05-05T15:53:28.647 回答