检测所有工作流程序列何时空闲

时间:2011-12-09 00:08:09

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

我的工作流程主要由相同的元素组成 每个元素的定义如下:

Workflow element

工作流可以简单地将这些元素按顺序堆叠,它可以并行运行,也可以在它们之间进行分支等。 - 工作流设计者的完全自由。整个事情都作为WCF服务托管,但如果可能的话,我宁愿不依赖它。

整个设置的高级概念如下:

  1. 当工作流程开始时,这些元素会一个接一个地开始启动,快速跳过顶部条件分支。完成上一个元素会导致下一个元素的开始 - 如工作流中所定义。
  2. 在某些时候,当条件[B]正确时,元素可能会占用底部分支并等待WCF调用。
  3. 迟早,要么所有元素都停止,要么工作流程完全结束。
  4. 我需要的是抓住所有元素停止等待WCF呼叫的那一刻。

    此时,我需要执行一些会影响工作流程进一步流动的计算。因此,我需要准确地抓住那一刻。

    一些注意事项:

    1. 我保证在进行这些计算之前不会有WCF调用。因此,与WCF调用相关的可能竞争条件超出了范围。
    2. 我没有控制控制流程的应用程序。换句话说,我在IIS中托管,因此,我将在不事先通知的情况下重新启动,并且无法设置计时器,长时间运行的循环,消息泵等。
    3. 我不控制工作流程的设计。
    4. 但是,我完全控制了元素的设计。实际上,这个元素实际上是NativeActivity(这就是为什么图来自Visio :-),我控制了它的源代码。
    5. 我还在某种程度上控制了托管环境。也就是说,我可以对托管工作流的Web应用程序进行修改。
    6. 整个工作流程“附加”到业务对象,并且所有元素都可以访问它。

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是创建一个TrackingAarticipant的扩展程序。此扩展程序将接收Track方法中的所有跟踪记录。然后,当它收到WorkflowInstanceStateRecord并且状态为“空闲”时,您将知道工作流处于空闲状态。活动可以访问此扩展程序以从中接收数据或调用其上的方法。

这是我在Introduction to State Machine Hands On Lab

中使用的技术