我正在学习WF框架,所以请耐心等待;我主要是在寻找 来开始寻找,不一定是直接的答案。我似乎无法弄清楚如何开始研究我在谷歌中想要的东西。
假设我有一个简单的一步工作流程(比这复杂得多,但为了简单起见)。此工作流需要在数据库中查看某个记录以查看其何时更改。当行更改时,我无法通过数据库中的触发器“推送”,因此我需要经常轮询它。
此工作流需要持久保存到数据库,以防止重新启动,因为这是一个长期运行的工作流。我试图找出每3分钟左右检查一次的最佳方法,并且还要坚持到数据库。框架的持久性功能是否允许这样做?它似乎是基于时间的。由于工作流程不会被外部事件重新唤醒,它如何从数据库重新加载并检查它之前再次执行的相同步骤?它是否在重新加载时自动尝试最后一次未完成的活动?
“while”活动是否有延迟附加的活动,或者只能通过持久性服务来处理?
答案 0 :(得分:1)
我不确定“通过持久性服务处理soley”是什么意思?持久性仅指存储空闲工作流。
您可以在While循环中的序列中具有延迟和代码活动。在延迟时,工作流将变为空闲状态,并且可以在必要时保留。但是,根据持久化工作流程所需的状态数量和/或您在任何时间运行的工作流程数量,可能意味着需要更精简的方法。
更精简的方法是将DB观看外部化并让一些“DB观看”工作流服务在发生所需的更改时引发事件。此服务将添加到Workflow运行时。
为此,您需要一个服务合同,该合同由具有[ExternalDataExchange]属性的Inteface定义。该接口又定义了当检测到所需的DB更改时服务将引发的事件。它还定义了一个工作流可以调用的方法,以指定此服务应该查找的更改内容。该方法应接受实例GUID,以便在检测到DB更改时找到请求实例。
在工作流程中,您使用CallExternalMethodActivity来调用此服务方法。然后,您将转到HandleExternalEventActivity,以侦听该事件。此时,工作流将处于空闲状态并且可以保持不变。它会一直存在,直到服务提升为止。