Windows工作流 - 有没有办法保证只运行一个工作流?

时间:2009-11-13 16:59:16

标签: windows workflow workflow-foundation

工作流程正在作为wcf服务发布,我需要保证工作流程按顺序执行。是否有一种方法 - 在代码中或在配置中 - 保证运行时不会同时启动两个工作流程?

3 个答案:

答案 0 :(得分:0)

您可能需要在工作流启动时检查另一个正在运行的实例。 如果找到,请取消它。

答案 1 :(得分:0)

无法配置运行时以限制正在进行的工作流程数。

考虑一下, flow 本身负责控制流程。因此,工作流本身应具有确定其自身的另一个实例当前是否正在进行的手段。

我会考虑创建一个Activity,它会在事务上尝试更新DB记录,直到此工作流的实例正在进行中。如果它发现另一个当前正在进行中,则可以采取适当的措施。它可能会失败,或者它可以使用EventActivity自行排队,以便在之前的工作流程完成时收到警报。

答案 2 :(得分:0)

我不同意这需要在WorkflowRuntime级别处理。我喜欢自定义Activity的想法,一种MutexActivity,它是一个具有DB后端的CompositeActivity。第一次执行将记录到它拥有互斥锁的数据库。后续调用将排队其工作流ID,然后进入空闲状态。当MutexActivity完成时,它将释放Mutex,加载队列中的下一个工作流并调用包含的子活动。