工作流托管选项

大多数 Windows Workflow Foundation (WF) 示例都使用控制台应用程序中托管的工作流,但这不是实际工作流的现实方案。 实际业务应用程序中的工作流将托管在持久进程中-由开发人员创作的 Windows 服务或服务器应用程序(如 IIS 7.0 或 AppFabric)。 这些方法之间的差异如下。

使用 Windows AppFabric 在 IIS 中托管工作流

将 IIS 与 AppFabric 配合使用是工作流的首选主机。 用 AppFabric 来承载工作流的应用程序是 Windows Activation Service,它解除了仅通过 IIS 对 HTTP 的依赖。

单独在 IIS 中托管工作流

不建议单独使用 IIS 7.0,因为 AppFabric 提供了一些管理和监视工具,有助于维护正在运行的应用程序。 如果存在迁移到 AppFabric 的基础结构问题,则仅应在 IIS 7.0 中托管工作流。

警告

IIS 7.0 出于各种原因定期回收应用程序池。 回收应用程序池时,IIS 停止接受旧池的消息,并实例化新的应用程序池以接受新请求。 如果工作流在发送响应后继续工作,IIS 7.0 将不知道正在完成的工作,并且可能会回收托管应用程序池。 如果发生这种情况,工作流将中止,跟踪服务将记录一个 1004 - WorkflowInstanceAborted 消息,其中包含一个空的 Reason 字段。

如果使用持久性,主机必须从最后一个持久性点显式重启中止的实例。

如果使用 AppFabric,则使用持久性时,工作流管理服务最终将从最后一个成功的持久性点恢复工作流。 如果未使用持久性,并且工作流在请求/响应模式之外执行作,则工作流中止时数据将丢失。

在自定义 Windows 服务中托管工作流

创建自定义工作流服务来托管工作流将要求开发人员复制 AppFabric 提供的大量现装功能,但允许自定义功能更具灵活性。 仅当 AppFabric 证明不是选项时,才应考虑此选项。