实例存储、查询和控制提供程序

实例存储是实例的逻辑容器。它是存储实例数据和元数据的位置。实例存储并不是专用物理存储。实例存储可以包括 SQL Server 数据库中的持续信息或内存中的非持续状态信息。.NET Framework v4 包含 SQL 工作流实例存储,这是使工作流将实例数据和元数据暂留到 SQL Server 2005 或 SQL Server 2008 数据库中的实例存储的具体实现。有关详细信息,请参阅 .NET Framework 帮助中的实例存储 (https://go.microsoft.com/fwlink/?LinkId=181533)。AppFabric 支持将工作流服务实例仅暂留在 SQL Server 2008 数据库中。

要使用含有 AppFabric 工具(Windows PowerShell cmdlet 和 IIS Manager 扩展)和工作流管理服务的实例存储,您需要为该实例存储开发实例存储提供程序、实例查询提供程序和实例控制提供程序。以下部分介绍这三种类型的提供程序。

备注

实例查询和控制提供程序 API 基于 .NET Framework 2.0 之上,但实例存储提供程序 API 则基于 .NET Framework v4 之上

实例存储提供程序

实例存储的实例存储提供程序公开客户端调用的 API 以创建实例存储对象。客户端使用实例存储对象将工作流实例保存到基础实例存储中(例如:SQL Server 数据库)或从实例存储加载实例。

AppFabric 包含 SQL 工作流实例存储的实例存储提供程序。要支持其他实例存储,您必须为该实例存储创建实例存储提供程序。要创建实例存储提供程序,您需要创建从 InstanceStoreProvider 类派生的类,并且实现用于创建实例存储(例如 SqlWorkflowInstanceStore)的方法。有关详细信息,请参阅如何:开发实例存储提供程序

实例查询提供程序

实例存储的实例查询提供程序可以让您针对实例存储执行查询。当您使用 cmdlet(例如 Get-ASAppServiceInstance)在实例存储中查询实例时,cmdlet 将创建查询提供程序对象并调用该对象上的方法。查询提供程序对象将创建查询并针对实例存储执行查询,然后将查询结果返回到 cmdlet。在大多数情况下,AppFabric IIS Manager 扩展使用 cmdlet 针对实例存储进行查询。因此,IIS Manager 扩展也依赖于查询提供程序。

所有查询提供程序均实现同一 API,并且在各种不同的基础实例存储上提供一个抽象层。AppFabric 包含 SQL 工作流实例存储的实例查询提供程序,您可以通过该提供程序查询 SQL Server 暂留数据库中存储的实例。当 SQL 查询提供程序(例如 Windows PowerShell cmdlet)收到来自客户端的查询时,该提供程序将从 SQL Server 数据库查询并检索实例数据,然后将结果集返回到客户端。SQL 工作流实例存储的实例查询提供程序的实现位于 Microsoft.ApplicationServer.StoreManagement.dll 中。

要支持查询不同类型的实例存储,您需要具有该存储的实例查询提供程序。要创建自定义查询提供程序,您需要创建 InstanceQueryProvider 类派生的类,并实现用于代表客户端运行查询的方法。有关详细信息,请参阅如何:开发实例查询提供程序

实例控制提供程序

实例控制提供程序允许客户端针对实例存储中的实例发布控制命令,并检索针对实例需要执行的命令。当您使用 AppFabric Windows PowerShell cmdlet 控制(挂起、继续等)实例存储中的实例时,cmdlet 将创建控制提供程序对象并调用该对象上的方法以将命令添加到命令队列。控制提供程序维护实例存储中存储的命令队列。通用主机(例如,工作流管理服务 (WMS))将创建控制提供程序对象,并调用其上的方法以检索存储在命令队列中的命令,然后执行命令。WMS 通知控制提供程序有关执行失败或成功的消息。如果执行成功,控制提供程序将从队列中删除该命令;否则 WMS 将通知控制提供程序有关失败的消息,并且提供程序将进行相应操作。

除了将命令从命令队列转发到 WMS 之外,实例控制提供程序还将转发包含元数据(有关发布命令所针对的实例的元数据)的属性包。此属性包包含实例的站点名称和虚拟服务路径。控制提供程序从实例存储中获取此元数据。WMS 使用此元数据获取对服务实例公开的实例控制终结点 (ICE) 的访问权限,并调用终结点上的相应方法。

所有查询提供程序均实现同一 API,并且在各种不同的基础实例存储上提供一个抽象层。AppFabric 包含 SQL 工作流实例存储的实例控制提供程序,您可以通过该提供程序针对 SQL Server 暂留数据库中存储的实例发布控制命令。SQL 工作流实例存储的实例控制提供程序的实现位于 Microsoft.ApplicationServer.StoreManagement.dll 中。要支持针对不同类型的实例存储中存储的实例发布命令,您需要为该存储开发实例控制提供程序。

要创建自定义控制提供程序,您需要创建 InstanceControlProvider 类派生的类,并实现用于代表客户端向命令队列添加命令以及从命令队列检索命令的方法。有关详细信息,请参阅如何:开发实例控制提供程序

SQL 工作流实例存储的实例控制提供程序

AppFabric 包含 SQL 工作流实例存储的实例控制提供程序。实例控制提供程序将命令队列保持在 SQL Server 数据库中。当您针对 SQL 工作流实例存储执行控制 cmdlet 时,实例控制提供程序将接收请求,并将命令信息存储在 SQL Server 数据库中的命令队列中。WMS 使用实例控制提供程序从命令队列中检索命令,针对 SQL 工作流实例存储执行命令,以及在命令执行成功后从命令队列中删除命令。SQL 工作流实例存储的实例控制提供程序的实现位于 Microsoft.ApplicationServer.StoreManagement.dll 中。

以下几点适用于 SQL 工作流实例存储的实例控制提供程序:

  • 立即(同步)处理 Delete 命令。在控制提供程序将命令移交给 WMS 以进行处理之前,所有其他命令将在命令队列中排队或添加到命令队列中。

  • 命令队列是先进先出 (FIFO) 队列。控制提供程序在队列的未端添加新命令,并从顶端读取命令。控制提供程序将返回对于 WMS 未锁定的最早命令。

  • 控制提供程序只能为存储队列中的每个实例存储一个命令。当提供程序接收实例命令(命令已存在于队列中)的排队请求时,则将覆盖现有命令(如果命令未锁定)。如果命令锁定或命令处于“挂起”状态,则控制提供程序将返回错误。

  • 控制提供程序读取来自命令队列的命令后,将进行临时锁定。此锁定在 65 秒之后过期。在收到来自 WMS 的有关成功执行命令的通知后,提供程序将从命令队列中删除该命令。

  • 如果命令执行失败,则控制提供程序将重试命令五次。命令队列会维护失败执行尝试的计数。如果命令执行第五次失败,则提供程序将从命令队列中删除该命令。

  • 控制提供程序将命令执行错误日志保持在数据库中。此日志存储有关失败命令的元数据以及失败的原因。该日志最多包含每个实例的一个失败命令。每个日志项均包含命令类型、实例 ID、错误代码、错误消息、上次执行尝试的时间、命令执行时所在的计算机 ID 以及尝试执行的次数。

    当实例的新命令进行排队时,或当用户从实例存储中删除实例时,则将删除实例的日志项。用户可以使用 cmdlet 删除实例(例如:Remove-ASAppServiceInstance)。

  • 控制提供程序可同时取消 10 个命令排队。

另请参阅

概念

如何:开发实例存储提供程序
如何:开发实例查询提供程序
如何:开发实例控制提供程序
如何:配置实例存储、查询和控制提供程序

  2012-03-05