2011-11-25 58 views
5

在我们公司,我们有一个需要业务流程:Windows工作流 - PersistableIdle

  1. 得到X数据
  2. 等待用户Y做基于第2步研究
  3. 获得从ž数据数据

在研究这个问题时,似乎有几个选项可以在工作流中实现它。

  1. 在步骤1(工作流程活动)和步骤3(工作流程活动)之间添加延迟活动。然后在PersistableIdle事件期间,卸载工作流。当用户完成第2步时,从数据库重新加载工作流程。
  2. 与#1相同,只是使用书签而不是延迟活动。

是否有更好的计算策略(1,2或另一种选择)?

我们所有的其他活动都是AsyncCodeActivities,所以我相当肯定他们不会触发PersistableIdle事件(因为他们在非持久区域中),但我想确保工作流程不会意外卸载其他情况。这里有风险吗?无论如何创建一个强制工作流程卸载的活动?

+0

windows wf4,我猜? – x0n

+0

是的。我正在使用Windows工作流程4。 – user472292

回答

5

是否有更好的方法(1,2或其他选项)?

乍一看,#2听起来像必要的。使用书签(或书签等某种活动,如接收)的原因是,他们可以随时恢复。这允许用户Y的研究结束并且工作流随时恢复执行(而不是在延迟到期之前被阻止)。

的反驳,认为#1可能是必要的也就是你可能希望设置触发工作流操作的时间限制(提醒被解雇了,异常,取消等)。

如何决定?我认为答案通常是#3:两种

使用选择活动是一个很好的方法来做到这一点。在一个PickBranch触发器中使用书签活动,并在另一个PickBranch触发器中使用延迟活动,可以编写一个工作流程,它将“处理先发生的任何事情 - 用户Y或超时”。

你提出的第二个问题是“如何停止工作流被卸载的时候,我不希望它是 - 是惊喜流程卸载风险”?

那么,这取决于。如果您正在使用WorkflowServiceHost,那么让您的工作流程卸载并不会带来很大的风险,因为WorfklowServiceHost足够聪明,可以在需要执行更多工作(处理传入消息或从延迟恢复)中重新加载工作流程。

如果您没有使用WorkflowServiceHost,那么您可能正在编写主机,您可以通过某些工作达到相同的效果,或者您可以防止发生卸载 - 当您编写主机时,您控制卸载策略,通过WorkflowApplication上的事件

其他杂项点: - 异步代码活动确实会阻止您的工作流在执行异步工作时持续存在。我认为他们不应该故意用作反坚持机制 - 如果你想要其中的一种,请查看NoPersistZone activity

-没有“卸载”活动,但存在“持续”活动。工作流程可以说他们想要保存进度,但只有主持人才能在卸载发生时做出最终决定。