【问题标题】:Windows Workflow: EventHandlersActivity not completingWindows 工作流:EventHandlersActivity 未完成
【发布时间】:2009-04-04 05:05:19
【问题描述】:

我有一个带有 EventHandlingScopeActivity (UpdateListenerScope) 的自定义工作流活动。

EventHandlingScopeActivity内部是一个主SequenceActivity(UpdateListenerSequenceActivity)和一个EventHandlersActivity(UpdateHandlers)。

当主 SequenceActivity 完成时,有时 EventHandlersActivity 不会完成并允许 EventHandlingScopeActivity 完成,以便工作流继续到下一个活动。

奇怪的是,有时 UpdateHandlers 会完成,而有时却没有。我无法预测或控制 UpdateHandlers 何时会保持挂起状态。

这是典型的工作流跟踪日志(一切正常完成,关键步骤以粗体显示):

System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerSequenceActivity, ActivityStatusChange('(1)serviceQueueActivity1. UpdateListenerSequenceActivity',正在执行,成功)) System.Workflow.Runtime 信息:0:Activity 状态变化 - Activity:serviceQueueActivity1.UpdateListenerSequenceActivity Old:Executing;新:关闭 System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:调度条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity', Closed , 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerSequenceActivity, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity ', 执行中, 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity',关闭,成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:调度条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, System.EventArgs) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity ', 关闭, 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, System.EventArgs) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:调度条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, ActivityStatusChange('(1)serviceQueueActivity1.UpdateHandlers ', 执行中, 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, System.EventArgs) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, ActivityStatusChange('(1)serviceQueueActivity1.UpdateHandlers',执行,成功)) System.Workflow.Runtime 信息:0:活动状态更改 - 活动:serviceQueueActivity1.UpdateHandlers Old:Executing;新:关闭 System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:调度条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateHandlers', Closed , 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, ActivityStatusChange('(1)serviceQueueActivity1.UpdateHandlers ', 执行中, 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateHandlers',关闭,成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:调度条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerScope', Executing , 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateHandlers ', 关闭, 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:78f436b4-9f97-4d2b-a3dc-add8acf15c79:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerScope',执行,成功)) System.Workflow.Runtime 信息:0:活动状态更改 - 活动:serviceQueueActivity1.UpdateListenerScope Old:Executing;新:关闭

这里是工作流跟踪日志 UpdateHandlers 未完成:

System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerSequenceActivity, ActivityStatusChange('(1)serviceQueueActivity1. UpdateListenerSequenceActivity',正在执行,成功)) System.Workflow.Runtime 信息:0:Activity 状态变化 - Activity:serviceQueueActivity1.UpdateListenerSequenceActivity Old:Executing;新:关闭 System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:调度条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity', Closed , 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerSequenceActivity, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity ', 执行中, 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity',关闭,成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:调度条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, System.EventArgs) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateListenerScope, ActivityStatusChange('(1)serviceQueueActivity1.UpdateListenerSequenceActivity ', 关闭, 成功)) System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, System.EventArgs) 这里漏了一步!!! System.Workflow.Runtime 信息:1:工作流运行时:调度程序:InstanceId:6602768f-f043-4382-9d29-0be944f0d390:完成运行计划条目:SubscriptionEvent((1)serviceQueueActivity1.UpdateHandlers, System.EventArgs) System.Workflow.Runtime 信息:0:工作流运行时:WorkflowExecutor:工作流实例“6602768f-f043-4382-9d29-0be944f0d390”没有工作。

任何想法为什么 EventHandlersActivity 不会完成?此时工作流将永远挂起,因为事件处理程序正在侦听一个不会发送的事件。

【问题讨论】:

  • 此外,此自定义活动被动态插入到工作流中。我在其他地方使用了相同的自定义活动,但到目前为止,仅在动态插入时发生此错误。

标签: windows workflow


【解决方案1】:

根本原因最终是多个 HandleExternalEventActivity 活动并行侦听同一事件。基于http://msmvps.com/blogs/theproblemsolver/archive/2008/09/16/versioning-long-running-workfows-part-3.aspx 的示例使用 queue.Peek 而不是 queue.Dequeue 创建了自定义 IEventActivity。

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多