我真的在这里遇到一个非常不寻常的问题。我们刚刚将dev堆栈升级到Visual Studio 2012 / .NET 4.5。
我们希望升级到最新版本的Workflow Foundation(4.5),这意味着还要升级SQL工作流实例存储架构,以便我们可以使用并行版本控制等新功能。
首先,我开始运行随.NET 4.5一起安装的架构升级脚本: C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ SQL \ EN \ SqlWorkflowInstanceStoreSchemaUpgrade.sql
然后我运行了我的工作流程测试,一切正常。
下一步是将架构和数据更改合并到我们的SQL Server数据库项目(VS 2012中的新项目)中,以便这些更改将在构建过程中自动构建和部署。
我从更新的数据库实例到数据库项目进行了模式比较,数据库项目识别并导入了所有模式更改,并更新了我们的参考数据脚本,以便SqlWorkflowInstanceStoreVersion表具有正确的值。
然后我发布了该项目,这意味着目标数据库被删除,重新创建,并填充了默认参考数据(包括商店版本行)。
我再次运行了工作流测试,这次工作流测试所有超时等待工作流线程返回。 PersistableIdle处理程序被调用到Unload,但是Unloaded处理程序永远不会被调用,所以现在之间有些东西搞砸了。
显然这与数据库重新创建这一事实有关,但我看不出使用VS 2012中的模式比较工具有任何差异。
在我们解决这个问题之前,我们无法继续使用WF 4.5功能,有没有人知道这里可能会发生什么?
答案 0 :(得分: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#表达式将在设计器中替换为消息在XAML中设置了值。
将发生许多构建错误,包括以下错误。
文件格式与当前定位框架不兼容。要转换文件格式,请明确保存文件。保存文件并重新打开设计器后,此错误消息将消失。
升级SQL持久性存储似乎以使其工作流程必须重新编译为.Net 4.5,或者它现在支持版本控制时尝试与持久性存储进行通信。
在您的情况下可能没有必要,但我们还必须创建更新映射以“升级”活动定义和运行实例。 MSDN在此提供了一篇冗长的文章: How to: Update the Definition of a Running Workflow Instance
动态更新参考也很有用: Dynamic Update
这是一个非常复杂的过程,但之后一切都开始了。
您可能还会发现这有用:How to: Host Multiple Versions of a Workflow Side-by-Side