Windows 工作流持久性服务

许多业务流程都需要花很长时间才能完成(长达数月或甚至数年)。 将工作流保存在内存中不仅不切实际(由于内存限制的原因),而且,因为必须在单一服务器上处理实例,所以还会妨碍缩放。 许多这些长期运行的工作流都是执行不活跃的流程或过程逻辑,并且实际上处于空闲状态,等待来自用户或其他系统的输入。 通过卸载空闲的实例,主机应用程序将能够节省内存,并且能够跨处理服务器进行缩放。

当工作流运行的时候发生特定情况时,工作流运行时引擎就会使用持久性服务(如果在运行时加载了持久性服务)保留有关工作流实例的状态信息。 这些情况包括:

如果满足这些条件之一且将持久性服务添加到运行时引擎,则运行时引擎会调用由持久性服务提供的方法,以保存关于工作流实例的状态信息。 同样,当工作流运行时引擎必须还原以前保留的工作流实例时,它调用由持久性服务提供的方法,以加载此状态信息。 换句话说,工作流实例决定持久性发生的时间,但持久性服务决定是否执行必要的持久性操作。

SqlWorkflowPersistenceService 管理的工作流状态的另一部分是计时器信息。 每当在您的工作流定义内配置 DelayActivity 活动,且使用类似 SqlWorkflowPersistenceService 的持久性服务时,与该活动相关的时间跨度信息会作为工作流状态的一部分被保留下来。 每当由工作流运行时计算工作流实例时,都会处理挂起计时器事件。

创建持久性服务

可以通过从 WorkflowPersistenceService 类派生一个类来创建持久性服务。 通过调用 AddService 或在应用程序配置文件中添加合适的项,可以将持久性服务添加到工作流运行时引擎。 Windows Workflow Foundation 提供了 SqlWorkflowPersistenceService 类,这是一种全新的持久性服务,可以按原样使用或对其进行扩展。 有关创建自定义持久性服务的更多信息,请参见创建自定义持久性服务。 有关使用 SqlWorkflowPersistenceService 类的更多信息,请参见使用 SqlWorkflowPersistenceService

备注

WorkflowRuntime 必须仅包含一个持久性服务。

锁定工作流状态信息

工作流运行时引擎具有锁定工作流状态信息的语义,当在其他进程中运行的持久性服务可能有权访问单个数据存储区时,可以使用该语义。 使用 WorkflowPersistenceService 类,您可以通过以下方法支持工作流引擎的这一功能:向指定是否应该在存储区解锁工作流实例的状态信息的 SaveWorkflowInstanceState 提供参数,以及提供解锁以前锁定的工作流状态信息的 UnlockWorkflowInstanceState 方法。 在实现锁定的持久性服务中,对 LoadWorkflowInstanceState 的调用将锁定工作流实例的状态信息。

在创建自己的持久性服务时,如果该服务不将状态信息保存到其数据存储区或从其数据存储区加载状态信息,则引发 PersistenceException。 工作流运行时引擎需要此行为。

持久性服务批处理行为

为使用持久性存储区来保存工作流状态信息的服务提供了批处理机制。 在这种情况下,在持久性服务使用的持久性存储区与工作流运行时引擎内部状态之间保持一致十分重要。 您可以将由 IPendingWork 接口定义的功能添加到服务,然后通过将数据存储区更改作为工作项添加到 WorkBatch,来参与由 WorkflowCommitWorkBatchService 服务提供的工作流事务批处理。 有关更多信息,请参见 SaveCompletedContextActivitySaveWorkflowInstanceState

复杂的宿主情形

Windows Workflow Foundation 解决方案部署的一个可能的情形是创建多个主机应用程序,每个应用程序都有在不同的桌面和服务器配置上运行的一组不同的服务。 在这种情形下,可能要求在解决方案中定义的一些工作流只能在特定的系统上执行。 Windows Workflow Foundation 中全新的服务(如 SqlWorkflowPersistenceService 服务)不支持这种配置。 若要控制在哪些系统上加载哪些工作流实例,必须创建自定义持久性服务。 有关更多信息,请参见创建自定义持久性服务

请参见

参考

SqlWorkflowPersistenceService
SqlPersistenceWorkflowInstanceDescription
WorkflowPersistenceService
WorkBatch

概念

使用 SqlWorkflowPersistenceService
创建自定义持久性服务

其他资源

Windows Workflow Foundation 服务
练习 4:使用运行时服务
Using Persistence Services

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。