在WF 4中实现GoTo

时间:2010-11-29 20:46:33

标签: wcf workflow-foundation workflow-foundation-4 appfabric

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

用例是管理性的。一个长时间运行的工作流在接收活动A处于空闲状态。某些客户端错误地调用该服务,将其转移到接收活动B.工作流(可以嵌入在更大的工作流中)没有返回A的路径。客户端调用支持桌面并要求将工作流程设置回A。

我们已经看到这种情况经常发生在生产中。我们现有的BPM系统支持“goto”调用。如何在WF 4中实现这一目标?

编辑:如果以上内容不实用,那么从“快乐路径”实现“失败”活动的好设计模式是什么,它可以分支到有限数量的已知路径之一基于变量的先前活动(从这里重启)?目标是避免使用多行创建不可读的工作流程。

编辑2:我们决定不采用这条路线,但是有一个较新的MSDN article正在做这件事。

编辑3:我们再次改变了主意,并且正在使用上面链接的MSDN文章中的Leon Welicki的解决方案。 :)

1 个答案:

答案 0 :(得分:2)

这不能开箱即用。

如果可以完成,则意味着打开工作流状态,存储在4个二进制列中并将其更改为之前的状态,因为知道任何数量的活动都可以执行,并且任何变量都可能已被更改甚至丢弃因为它们不再适用范围。

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