在.NET中构建工作流应用程序的最佳方法



我需要在.NET中构造一个动态的工作流程应用程序,该应用程序基本上允许创建,监视,暂停,重新启动,持续,持久并动态更新工作流。工作流的每个节点都是一项高要求的计算任务,可能需要几个小时,并且工作流将至少由20个节点组成。

目前,最好的解决方案似乎是使用WF4,但是环顾四周,我在F#,Orleans或Akka.net中创建的基于代理的编程非常吸引人实现工作流解决方案,与WF4相反没有那么多的水管学习。使用基于代理的编程启动解决方案是一个好主意,还是我应该使用WF4?

<edit>

要回答有关建立基于代理的模型的问题,这是我认为的最佳方法。在分开整个操作的"驱动程序"的同时,它也更容易进行调试和维护(即,您可以换掉WF并用其他设备替换)。

</edit>

WF4可用于推动长期运行的业务逻辑。我使用的最好的方法是一个工作流,它只是启动"代理流程",而在代理商正常工作时,wf实例Hibernates等待代理人唤醒。

简而言之,类似这样的方法:

  • 有一个"编排"过程,负责启动新的工作流程和保湿持续的工作流程。
  • 并具有实际运行长期运行任务的"代理"过程(或过程)。

编排过程

此过程负责启动全新的工作流实例。您的工作流程只需启动一个代理程序即可完成实际工作。然后,工作流实例将冬眠。

此过程还将等待请求恢复冬眠的工作流程实例。从本质上讲,工作流程的实例只会"运行"片刻,并将真实工作委派给其他线程/过程。

实施编排过程的一种方法是作为Web服务。它使代理流程很容易返回到它完成时唤醒沉睡的工作流实例。

代理过程

此过程将具有执行工作的实际知识。当由编排过程调用时,将提供一些信息,以了解其应执行的上下文(即业务对象)。完成后,代理商会告知编排过程。

回到编排过程

当代理完成任务时,它会回到编排过程中,即上下文准备继续进行流程中的下一个项目。编排过程将补充该上下文的工作流程,并恢复。

工作流可以决定接下来是另一个长期运行的任务,从而将另一个代理进程插入以将任务委派给,然后再次冬眠工作流实例。这个周期一直持续到工作流实例到达末端。

"动态"工作流程部分

我认为您指的是更新"正在进行的"工作流程,对吗?如果是这样,WF4.5具有允许这样做的能力。我还没有实施过(),但从我阅读的内容来看。

该概念涉及添加一些有关执行工作流程的版本的元数据。wf将负责启动动态活动更新,您可以控制该更新。

相关内容

最新更新