【问题标题】:Copying a WF4 instance store database from production environment to development environment?将 WF4 实例存储数据库从生产环境复制到开发环境?
【发布时间】:2013-10-02 04:15:52
【问题描述】:

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

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

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

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

请帮忙(2013 年 9 月 10 日)

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

【问题讨论】:

  • 我刚刚添加了一个“请帮助”部分,看看这篇文章是否能引起更多关注。到目前为止已经一个月了,我几乎可以肯定这篇文章的内容是其他人定期成功做的事情。所以……请帮忙!谢谢。

标签: .net workflow-foundation-4


【解决方案1】:

Jesús LópezMSDN 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 列中的相应值在复制的实例存储数据库中,允许系统从复制的实例存储数据库中的数据中正确识别和重新激活这些工作流。

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

大家好。

【讨论】:

    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多