实例存储区

实例存储是实例的逻辑容器。 它是存储实例数据和元数据的位置。 实例存储并不意味着专用物理存储。 实例存储可以包含 SQL Server 数据库中的持久信息或内存中的非持久状态信息。 .NET Framework 4.6.1 附带 SQL 工作流实例存储,它是实例存储的具体实现,允许工作流将实例数据和元数据保存到 SQL Server 2005 或 SQL Server 2008 数据库中。 此外,Windows Server App Fabric 还提供实例存储的具体实现。 有关详细信息,请参阅 Windows Server App Fabric 实例存储、查询和控制提供程序

持久性 API 是主机和实例存储之间的接口,允许主机将命令请求(例如 LoadWorkflowCommand ,和 SaveWorkflowCommand)发送到实例存储。 此 API 的具体实现称为持久性提供程序。 持久性提供程序接收来自主机的请求并修改实例存储。

主机和实例存储是可插入的,以便主机可与许多实例存储一起使用,实例存储可以用于多个主机。 实例存储通常针对特定主机的使用模式进行优化,尽管实例存储和主机可能会在独立的生命周期中发展。 例如, WorkflowServiceHostSqlWorkflowInstanceStore 旨在很好地协同工作。 可以创建自己的实例存储来保存工作流服务实例的数据和元数据,并将该实例存储与 WorkflowServiceHost 一起使用。 例如,可以创建一个 OracleWorkflowInstanceStore,该存储允许工作流将信息保存到 Oracle 数据库中,而不是将它们保存到 SQL Server 数据库中。

主机通常使用修改持久化对象的附加功能进行扩展。 例如,实例持久性系统可能包括工作流主机、支持“挂起”操作的扩展,以及 SQL 实例存储。 工作流主机可能会发送标准命令,例如“保存”或“加载”,以便从实例存储区保存或加载工作流,或将工作流保存到实例存储中。 暂停扩展可能会向保存和加载工作流实例的命令添加其他语义,以便无法加载暂停的工作流实例。 SQL 实例存储的持久性提供程序了解用于保存和加载工作流实例的命令,并通过调用更改 SQL Server 数据库中持久对象的表的适当存储过程来实现这些命令。

主机充当实例存储中的实例所有者。 主机可以同时充当多个实例所有者,并拥有多个实例存储。 主机为与实例关联的实例密钥提供 GUID。 实例键是标识实例的唯一别名。 持久性系统在执行主机请求的命令时创建、更新和删除实例所有者信息。

以下列表包含主机与实例存储交互所涉及的重要步骤:

  1. 从持久性提供方获取一个InstanceStore

  2. 通过在 CreateInstanceHandle 上调用方法, 获取实例句柄。

  3. 通过调用Execute方法在InstanceStore上对实例句柄执行命令。

  4. 检查 InstanceView 返回的以确定命令执行情况。