【问题标题】:Windows workflow not waking up after delayWindows 工作流程延迟后未唤醒
【发布时间】:2017-09-21 15:38:53
【问题描述】:

我们有两个序列的 Windows 工作流服务。在这两个序列之间,延迟活动设置为new TimeSpan(0,0,10),即 10 秒。

MainSequence
   Sequqnce_1
   Delay
   Sequqnce_2

因此,在执行第一个序列后,WF 会持续到 SQL 服务器,然后在 10 秒后它会唤醒以执行第二个序列。

这在过去 3 年里一直有效。但是突然(从昨天开始)WF在延迟醒来后停止

我在 web.config 中启用了system.diagnistics,在日志中我看到以下内容

DisplayName: 'Sequence_1', InstanceId: '2' 已完成 “关闭”状态

活动“System.Activities.Statements.Sequence”,显示名称: 'MainSequence', InstanceId: '1' 计划的子活动 'System.Activities.Statements.Delay', DisplayName: '延迟'

之后,日志中就没有任何内容了。

当我检查工作流数据库时,我看到了 [System.Activities.DurableInstancing].InstancesTable 但是我注意到 PendingTimer 是 NULL

我不确定PendingTimer NULL 是否会导致此问题,以及是否是 WF 将其设置为 null 的原因?

更新 1
结果我的同事在服务器上安装了 .Net 4.7 的服务器上运行了 Windows 更新。但是 WF 应用程序设置为目标框架 4.5.1。 我不确定更新是否导致此问题

更新 2

我启用了 ETW 跟踪以查看发生了什么,我看到了以下异常

无法确定数据库的版本,因为在 System.Activities.DurableInstancing.SqlWorkflowInstanceStoreVersionTable 中未找到任何行。此表应包含与创建或升级到的框架版本相对应的单行

完全异常

System.InvalidOperationException,mscorlib, 版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089的版本 无法确定数据库,因为在 System.Activities.DurableInstancing.SqlWorkflowInstanceStoreVersionTable。 此表应包含与版本对应的单行 使用它创建或升级的框架 到。在 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult 结果)在 System.Activities.DurableInstancing.SqlWorkflowInstanceStoreAsyncResult.End(IAsyncResult 结果)在 System.Activities.DurableInstancing.PersistenceTask.CommandCompletedCallback(IAsyncResult 结果)System.InvalidOperationException: 无法确定数据库的版本,因为未找到任何行 在 System.Activities.DurableInstancing.SqlWorkflowInstanceStoreVersionTable。 此表应包含与版本对应的单行 使用它创建或升级到的框架。在 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult 结果)在 System.Activities.DurableInstancing.SqlWorkflowInstanceStoreAsyncResult.End(IAsyncResult 结果)在 System.Activities.DurableInstancing.PersistenceTask.CommandCompletedCallback(IAsyncResult 结果)

当我检查System.Activities.DurableInstancing.SqlWorkflowInstanceStoreVersionTable 时,它是空的。然而,这张桌子一直是空的。这个问题发生在Development 服务器上(我们运行安装了 .NET 4.7 的 Windows 更新)

我们还有其他环境 StagingProduction尚未安装 Windows 更新。我在这些服务器上检查了SqlWorkflowInstanceStoreVersionTable,确实该表是空的,但是工作流在这些服务器上运行良好,没有任何问题

【问题讨论】:

    标签: .net wcf workflow-foundation-4 workflow-foundation


    【解决方案1】:

    您可能希望通过此链接迁移您的 .net 框架

    https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/runtime/4.6.2-4.7

    【讨论】:

    • 感谢这真的有助于理解发生了什么变化。基本上我的应用程序的目标框架是 4.5.1。我们一直在服务器上安装新的 dot net 框架。 Window Workflow Foundation 直到 4.6.2 都没有更新,所以一切正常。但是在 4.7 中,Windows 工作流程发生了变化。无论如何要解决我的问题,我只是在 SqlWorkflowInstanceStoreVersionTable 中添加了一行
    • 在旁注中我在哪里可以获得 WWF 的 .NET 4.5.1 的 SQL 脚本
    • 您可以在此处找到 WF SQL 持久性脚本:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SQL\en
    • 在此处运行这些脚本的更多信息:docs.microsoft.com/en-us/dotnet/framework/…
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多