.net - 将 WF4 实例存储数据库从生产环境复制到开发环境?

标签 .net workflow-foundation-4

在 WF4 中将实例存储数据库从生产服务器复制到开发服务器的正确方法是什么?我们有一个在 AppFabric 和 IIS 上使用 Windows Workflow Foundation 4 的应用程序。我们有一台带有 SQL Server 2008 R2 的机器托管我们用于生产环境的实例存储数据库,还有一台单独的机器,也带有 SQL Server 2008 R2,用于托管我们用于开发环境的实例存储数据库。现在,我们需要将生产环境中的确切状态复制到开发环境中。对于简单的业务数据库,我只是要求我们的数据中心备份开发业务数据库(Oracle 服务器),然后用生产数据库(单独的机器)的副本完全替换开发业务数据库。我认为也许相同的方法可以同样轻松地用于我们的 WF4 实例存储数据库。

但事实并非如此。复制后,在开发环境中运行应用程序,每当它尝试恢复实例书签或调用属于已启动工作流一部分的实例操作时,我们会在具有标识符的服务实例上获得“操作'[操作名称]' [guid]' 此时无法执行。请确保操作以正确的顺序执行,并且使用中的绑定(bind)提供有序的交付保证”异常消息。

另一方面,如果我们开始一个新的工作流,它工作正常并且可以毫无问题地继续到最后。通过简单查看 System.Activities.DurableInstancing.InstancesTable,在我看来,在复制之后,无法正确识别以前的工作流实例,并且 WF4 尝试启动新的实例,这导致“操作顺序不正确”事物。例如,这些新创建的实例与从生产中复制的实例中的 ServiceDeploymentId id 非常不同。但我对 WF4 的经验真的很少,而且对发生的事情一无所知。 (在创建这篇文章之前,我确实从 StackExchange 和其他来源搜索了答案。)

我们如何创建生产 WF4 实例存储的副本,一旦在我们的开发服务器中,将与我们在开发环境中的应用程序一起工作,因为它具有与生产环境相同的应用程序状态?谢谢。

请帮忙(2013 年 9 月 10 日)

你好。我想知道为什么到目前为止还没有对这篇文章发表评论。事实上,使用生产环境中的数据更新开发或 QA 环境中的数据是很常见的事情。而且我几乎可以肯定,WF4 工作流也会以某种方式定期完成此操作。这是将 WF4 工作流的状态从一个数据库服务器(生产)复制到另一个数据库服务器(QA 或开发)的问题,以便在 QA 或开发环境中运行的应用程序可以“获得”与生产服务器相同的应用程序状态,从那里可以继续推进和处理从生产中复制的工作流,但在它自己的环境中,无缝地。拜托,如果有人这样做过,或者知道如何做,并且很乐意阐明这个主题,我们将不胜感激。谢谢和问候。

最佳答案

Jesús López给了我这个 MSDN thread 的答案,我在这个 StackOverflow 的线程中提出了完全相同的问题。

首先,他问道:“工作流服务(xalmx 文件)的 [IIS] 路径在生产中是否与开发中相同?如果路径因虚拟目录不同而不同,则 WorkflowHostType 列也不同,这可能会导致问题。”

在让他知道 IIS 站点 名称在生产环境和开发环境中实际上是不同的,即使工作流服务的其余路径相同,他回答说:“[IIS 站点] ] 必须具有相同的名称。我刚刚测试过它。我在 IIS 中更改了站点名称,突然 WorkflowHostType 发生了变化。因此,空闲的持久工作流将不再加载。”然后他补充说:“请看这篇文章,它解释了 WorkflowHostType 是如何生成的:Broken WF4 workflow rehydration”。

这就成功了!在我的例子中,我只需要重命名开发环境中的 IIS 站点名称,使其与生产环境中的 IIS 站点名称完全匹配。一旦我们的数据中心使用生产数据库服务器中实例存储的副本更新了开发数据库服务器中的 WF4 实例存储,开发应用程序正确地获取了与生产应用程序相同的 WF4 状态,因为复制的工作流被正确识别和加载。最后,我们可以将这个系统的业务数据和WF4状态从生产环境复制到开发环境,在不接触生产数据的情况下排查生产问题。

正如 Jesús 帮助我理解的那样,原因是:托管 WF4 工作流服务(.xamlx 文件)的 IIS 应用程序的完整路径必须完全相同,包括IIS 站点名称,如果要在这些应用程序(在不同环境中)之间复制 WF4 实例存储数据库,因为显然,服务文件名、站点名称和路径都是WorkflowHostType 列的值计算。这样,应用程序为每个空闲持久工作流寻找工作流主机类型的值将与 System.Activities.DurableInstancing.InstancesTable 的 WorkflowHostType 列中的相应值相匹配在复制的实例存储数据库中,允许系统根据复制的实例存储数据库中的数据正确识别和重新激活这些工作流。

我希望这些信息可以帮助其他人遇到与我相同的情况。如果您认为这个答案需要进一步澄清,请告诉我。

大家好。

关于.net - 将 WF4 实例存储数据库从生产环境复制到开发环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18198968/

相关文章:

c# - 基于wf 4+的开源工作流引擎项目

workflow-foundation-4 - 列出当前在 .Net 4.0 中运行的工作流

debugging - SharePoint 2013 Visual Studio 工作流未更新

asp.net - 如何在 Visual Studio 2017 中重命名发布配置文件?

.net - Windows Azure,解决实例和粘性 session

c# - 如何让 J# 与 VS 2010 和 .NET 4 一起工作

.net - 如何使用 InvokeMethod 事件将字符串添加到使用 Workflow Foundation 4 的通用列表

c# - 工作流/工作流服务组合?如何在 'normal' 工作流上使用 Receive 事件?

.net - 处置时托管资源和 native 资源有什么区别? (。网)

c# - 从 MSMQ 读取时无法反序列化 Message.Body