我需要在.net中构建一个动态工作流应用程序,它基本上允许创建、监视、暂停、重新启动、持久化和动态更新工作流。工作流的每个节点都是一个高要求的计算任务,可能需要几个小时,工作流将至少由20个节点组成。
目前,最好的解决方案似乎是使用WF4,但环顾四周,我发现在F#、Or良或Akka.NET中基于代理的编程对于实现工作流解决方案非常有吸引力,而与WF4不同的是,没有太多的管道需要学习。使用基于代理的编程启动解决方案是个好主意,还是我应该继续使用WF4?
发布于 2017-09-29 20:01:32
<edit>
要回答您关于建立基于代理的模型的问题,我认为这是最好的方法。它也使调试和维护更容易,同时分离出整个操作的“驱动程序”(即您可以交换WF并用其他设备替换它)。
</edit>
WF4可用于驱动长期运行的业务逻辑。我使用过的最佳方法是简单地启动“代理进程”的工作流,当代理工作时,WF实例会休眠,等待被代理唤醒。
简单地说,类似这样的方法:
编配过程
这个过程负责启动一个全新的工作流实例。您的工作流将简单地启动一个代理进程来完成实际工作。然后工作流实例将进行hibernate。
此过程还将等待请求恢复休眠的工作流实例。本质上,工作流实例将“运行”几分钟,并将真正的工作委托给其他线程/进程。
实现业务流程的一种方法是作为web服务。它使代理进程很容易在代理完成时调用它来唤醒休眠的工作流实例。
Agent过程
这个过程将有实际的执行工作的诀窍。当业务流程调用时,会向它提供一些信息,以了解它应该针对哪个上下文(即业务对象)执行。当它完成时,代理会通知业务流程它已经完成。
回到业务流程
当代理完成其任务时,它将对编排过程进行调用,该流程的上下文已准备好转移到流中的下一项。然后,编制过程将补充该上下文的工作流,并继续它。
工作流可以决定下一个长时间运行的任务,从而启动另一个代理进程,将任务委托给它,然后再对工作流实例进行hibernate。这个循环一直持续到工作流实例到达终点。
“动态”工作流部分
我想你指的是更新“已经在进行中”的工作流,对吗?如果是这样的话,WF4.5有能力允许这样做。我还没有实现过它,但从我所读到的内容来看,它是可行的。
这个概念包括添加一些关于正在执行的工作流版本的元数据。WF将负责启动一个动态活动更新,您可以控制它的协调。
https://stackoverflow.com/questions/46487321
复制相似问题