2010-11-29 194 views
1

鉴于在AppFabric下部署了SQL Server持久的.NET 4 Windows Workflow Foundation(WF)工作流服务,如何将服务从一个活动“跳”到另一个活动?工作流可以是顺序的或流程图。在WF 4中实施GoTo

用例是管理的。接收活动A中长时间运行的工作流处于空闲状态。某些客户错误地调用了服务,并将其推进到接收活动B.工作流(可能嵌入到较大的工作流中)没有返回到A的路径。客户端调用支持并要求将工作流设置回A.

我们已经看到这种情况在生产中经常发生。我们现有的BPM系统支持“goto”呼叫。这怎么能在WF 4中完成?

编辑:如果上述不切实际,从“幸福路径”实现“失败”活动的良好设计模式是什么,可以转移到有限数量的已知先前活动之一(重新启动从这里)基于一个变量?目标是避免使用多行代码创建不可读的工作流程。

编辑2:我们决定不走这条路,但有做这只是一个新的MSDN article

编辑3:我们再次改变了主意,并与上面链接的MSDN文章中的Leon Welicki的解决方案一起进行。 :)

回答

2

这不能开箱即用。

如果完全可以这样做,这意味着打开工作流程状态,存储在4个二进制列中,并将其更改为以前的状态,因为知道可以执行任何数量的活动并且可以更改任何变量,甚至可以更改任何变量因为它们不在范围内而下降。

假设我要试试这个,我会尝试从每次工作流程闲置时从SQL数据库中复制状态,以便获得具有工作流所有先前空闲状态的堆栈。然后在稍后工作流空闲而不在内存中时,您可以用当前状态替换当前状态并重新加载工作流。我从来没有尝试过,所以不知道它是否会起作用,并看到很多潜在的问题,认为像数据库交易竞争或电子邮件已发送,但执行第二次。

+0

我很害怕这个。你有任何解决方法的建议(即使只有部分解决方案)? – TrueWill 2010-11-30 15:34:41