.net Windows工作流延迟后未唤醒

.net Windows工作流延迟后未唤醒,.net,wcf,workflow-foundation-4,workflow-foundation,.net,Wcf,Workflow Foundation 4,Workflow Foundation,我们有两个序列的windows工作流服务。在这两个序列之间,延迟活动设置为新的时间间隔0,0,10,即10秒 MainSequence Sequqnce_1 Delay Sequqnce_2 所以,在执行第一个序列后,WF将持久化到SQL server,然后在10秒后,它将唤醒以执行第二个序列 这在过去三年中一直有效。但从昨天起,WF在延迟醒来后突然停止 我在web.config中启用了system.Diagnostics,并在日志中看到以下内容 DisplayName:'S

我们有两个序列的windows工作流服务。在这两个序列之间,延迟活动设置为新的时间间隔0,0,10,即10秒

MainSequence
   Sequqnce_1
   Delay
   Sequqnce_2
所以,在执行第一个序列后,WF将持久化到SQL server,然后在10秒后,它将唤醒以执行第二个序列

这在过去三年中一直有效。但从昨天起,WF在延迟醒来后突然停止

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

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

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

在那之后,日志中没有任何内容

当我检查工作流数据库时,我在 [System.Activities.DurableInstance].InstanceTable,但我注意到PendingTimer为空

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

更新1 原来我的同事在服务器上安装了.Net 4.7的服务器上运行了windows update。然而,WF应用程序被设置为目标框架4.5.1。 我不确定更新是否导致此问题

更新2

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

无法确定数据库的版本,因为在System.Activities.DurableInstance.SqlWorkflowInstanceStoreVersionTable中未找到任何行。此表应包含一行,该行对应于使用该表创建或升级到的框架版本

完全例外

System.InvalidOperationException,mscorlib, 版本=4.0.0.0,区域性=中性, PublicKeyToken=B77A5C561934E089的版本 无法确定数据库,因为在中找不到行 System.Activities.DurableInstance.SqlWorkflowInstanceStoreVersionTable。 此表应包含对应于版本的单行 创建或升级的框架的名称 到在 System.Runtime.AsyncResult.End[TAsyncResult]IAsyncResult结果位于 System.Activities.DurableInstance.SqlWorkflowInstanceStoreAsyncResult.EndIAsyncResult 结果 System.Activities.DurableInstance.PersistenceTask.CommandCompletedCallbackIAsyncResult 结果System.InvalidOperationException: 无法确定数据库的版本,因为找不到任何行 在里面 System.Activities.DurableInstance.SqlWorkflowInstanceStoreVersionTable。 此表应包含对应于版本的单行 创建或升级到的框架的。在 System.Runtime.AsyncResult.End[TAsyncResult]IAsyncResult结果位于 System.Activities.DurableInstance.SqlWorkflowInstanceStoreAsyncResult.EndIAsyncResult 结果 System.Activities.DurableInstance.PersistenceTask.CommandCompletedCallbackIAsyncResult 结果

当我选中System.Activities.DurableInstance.SqlWorkflowInstanceStoreVersionTable时,其为空。然而,这张桌子总是空的。此问题发生在我们运行安装了.NET 4.7的windows update的开发服务器上


我们还有其他登台和生产环境,其中尚未安装windows更新。我检查了这些服务器上的SqlWorkflowInstanceStoreVersionTable,实际上该表是空的,但是这些服务器上的工作流运行正常,没有任何问题

您可能希望通过此链接迁移.net framework


谢谢,这真的有助于理解发生了什么变化。基本上,我的应用程序的目标框架是4.5.1。我们一直在服务器上安装新的.net框架。在4.4.2之前,Windows工作流基础没有更新,所以一切都正常工作。但是,在4.7中,Windows工作流发生了变化。无论如何,为了解决我的问题,我只在SqlWorkflowInstanceStoreVersionTable中添加了一行。请注意,我在哪里可以获得WWF的.NET 4.5.1 SQL脚本。您可以在此处找到WF SQL持久性脚本:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SQL\n有关运行这些脚本的详细信息,请参见: