“使用持久性服务”示例

Download sample

此示例演示如何使用 SqlWorkflowPersistenceService 服务来加载和卸载工作流。

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

提示

通过在构造函数中将 UnloadOnIdle 参数设置为 true,也可以设置 SqlWorkflowPersistenceService 以自动卸载空闲工作流。

数据库配置

由 Windows Workflow Foundation 安装的 SQL 服务使用 Microsoft SQL Server 来存储信息。 可以对这些任务使用 Microsoft SQL Server 2005 Express、SQL Server 2000 或更高版本或 SQL Server 2000 Desktop Engine (MSDE)。

Windows Workflow Foundation 安装程序并不安装这些服务所需的数据库,但会安装用于为这些服务创建和配置数据库的 SQL 脚本。

提示

必须启用 Microsoft 分布式事务处理协调器 (MSDTC) 服务,才能使 SqlWorkflowPersistenceService 工作。

下面的步骤说明如何创建和配置本示例中的服务所使用的数据库。

创建和配置 SQL 数据库

  1. 在 SQL Server 2005 Express、SQL Server 2000 或更高版本或者 SQL Server 2000 Desktop Engine (MSDE) 中,使用如下 SQL 查询语句创建名为 SqlPersistenceService 的新数据库:

    CREATE DATABASE SqlPersistenceService

    注意:在工作流应用程序中同时使用 SqlTrackingServiceSqlWorkflowPersistenceService 时,建议对持久性服务和跟踪服务使用单一数据库。

  2. 在 SQL 查询分析器工作区中,从可用数据库列表中选择在步骤 1 中创建的数据库。

  3. 在**“文件”菜单上,单击“打开”**,并打开 SQL 脚本 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<语言>\SqlPersistenceService_Schema

  4. 通过单击**“执行”**来执行查询,或按 F5 创建 SQL 持久性服务表。

  5. 在**“文件”菜单上,单击“打开”**,并打开 SQL 脚本 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<语言>\SqlPersistenceService_Logic

  6. 通过单击**“执行”**来执行查询,或按 F5 创建 SQL 持久性服务存储过程。

示例演练

该工作流是一个顺序工作流,并按顺序包含三个活动:code1、delay1 和 code2。 CodeActivity 活动将当前 UTC 日期时间写入控制台,并且 DelayActivity 活动在继续之前将等待五秒。 通过为各种 WorkflowRuntime 事件提供处理程序,宿主应用程序可以管理将工作流实例加载到内存中以及从内存中卸载工作流实例的全面过程。

执行过程如下所示:

  1. 宿主创建和启动工作流。

  2. Code1 向控制台显示当前 UTC 日期时间。

  3. 工作流进入 delay1 活动。

  4. 工作流实例现在进入空闲状态,等待计时器过期。 当工作流变为空闲状态时,将导致 WorkflowRuntime 引发 WorkflowIdled 事件。

  5. Unload 方法调入 SqlWorkflowPersistenceService 服务以保持工作流实例。 随后,工作流运行时将释放工作流实例。

  6. 至少五秒钟后,计时器将过期。

  7. SqlWorkflowPersistenceService 服务从数据库中加载工作流,运行时将继续对工作流进行处理。

  8. 然后,Code2 向控制台显示 UTC 日期时间。 该日期时间应比 code1 显示的时间迟五秒。

  9. 工作流实例完成后,工作流运行时将调入 SqlWorkflowPersistenceService 服务以保持工作流的最终状态。

自定义服务

此示例使用现成可用的服务来保持状态;不过,您也可以创建自定义的状态保持服务。 您可能必须这样做才能使用最新的数据库系统或提供额外的功能。 有关如何开发自定义服务的更多信息,请参见本主题中列出的示例和 Windows Workflow Foundation 文档。

生成示例

  1. 通过单击**“下载示例”**来下载该示例。

    这会将示例项目提取到本地硬盘。

  2. 单击**“开始”,依次指向“程序”“Microsoft Windows SDK”,然后单击“CMD 外壳”[CMD Shell]**。

  3. 转到示例的源目录。

  4. 在命令提示符处键入 MSBUILD <解决方案文件名>

运行示例

  • 在 SDK 命令提示窗口中,运行 PersistenceServices\bin\debug 文件夹(对于该示例的 VB 版本为 PersistenceServices\bin 文件夹)中的 .exe 文件,该文件夹位于该示例的主文件夹下。

请参见

参考

SqlWorkflowPersistenceService
WorkflowPersistenceService

其他资源

“自定义持久性服务”示例
“引发事件以加载工作流”示例
Windows Workflow Persistence Services
Exercise 4 : Using Runtime Services
Using the SqlWorkflowPersistenceService Service
“宿主”示例
Task 3 : Using the Windows Workflow Persistence Service

Footer image

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