<edit>
要回答你的问题上建立一个基于代理的模式,即在我看来,最好的办法。它使调试和维护变得更容易,同时分离出整个操作的“驱动程序”(即,您可以换出WF并用另一个设备替换它)。
</edit>
WF4可用于驱动您的长时间运行的业务逻辑。我使用的最佳方法是一个简单地启动“代理进程”的工作流程,并且在代理正在工作时,WF实例休眠等待被代理唤醒。
概括地说,像这样的方法:
- 有一个“编排”的过程,负责启动新的工作流程和保湿坚持工作流程。
- 并有一个“代理”进程(或进程),实际上运行你长时间运行的任务。
的编排流程
这个过程是充电开始一个全新的流实例的。您的工作流程只需启动代理程序即可完成实际工作。工作流实例会休眠。
此过程还会等待恢复休眠工作流实例的请求。从本质上讲,工作流实例只会“运行”很短的时间,并将实际工作委托给其他线程/进程。
实施编排流程的一种方式是作为Web服务。代理程序完成后,代理程序可以轻松回调它以唤醒沉睡的工作流程实例。
在代理过程中
这个过程中会有执行工作的实际诀窍。当由编排过程调用时,会给它一些信息以知道应该执行哪个上下文(即业务对象)。完成后,代理通知编排流程已完成。
回到编排流程
当代理完成了它的任务,它使一个电话回编排流程的情况下准备继续前进到下一项在流动。然后,编排过程将水合该上下文的工作流程,并恢复它。
工作流程可能会决定另一个长时间运行的任务接下来启动,从而激活另一个代理程序进程以委托任务,然后再次休眠该工作流程实例。此循环将继续,直到工作流实例结束。
“动态”工作流部分
我想你指的是更新的“正在进行中”的工作流程,对不对?如果是这样,WF4.5有这个能力。我从来没有实现过(但),但从我读过的内容来看,这是可行的。
该概念涉及添加一些关于您正在执行的工作流版本的元数据。 WF将负责启动一个动态活动更新,您可以通过它进行协调。
他们真的是不同的东西,我不是很熟悉WF4的呃......我个人会从WF4开始,“这可能需要几个小时”听起来像生活在工作流世界中的东西,所有“long running transatction”类型的花里胡哨 – user2088029
看起来WF4有一个分歧的观点:https://stackoverflow.com/questions/104099/when-to-use-windows-workflow-foundation(看第二个答案)和https://stackoverflow.com/questions/513657/why-use-windows-workflow – Mario