业务流程的持久性

业务流程引擎将保存业务流程实例在不同持久化点时的整个状态,以便可以解除冻结业务流程实例。 该状态包括可在业务流程中使用的所有基于 .NET 的组件以及消息和变量。 该引擎存储处于以下持久化点时的状态:

  • 事务作用域(原子事务或长期事务)结束时

  • 在调试断点时

  • 在通过启动业务流程形状执行其他业务流程时

  • 在发送形状上(原子事务中除外)

  • 在挂起业务流程实例时

  • 在系统以可控方式关闭时

  • 在引擎确定它要解除冻结时

  • 在业务流程实例完成时

    引擎在持久化点占用高昂系统资源(尤其是在处理大消息)时优化持久化点的数目。 如下面的两个业务流程实例所示,在原子作用域中含发送形状的业务流程中,引擎确定事务作用域结束和业务流程结束之间的单个持久化点。 在其他业务流程中,存在两个持久化点,一个用于第一个发送形状,第二个用于发送形状外加业务流程结束。

    业务流程持久性

    业务流程持久性

    在业务流程中使用的任何基于 .NET 的对象(无论是直接的还是间接的)都必须标记为可序列化,但以下情况除外:对象在原子作用域中被调用,或者对象是无状态的并且只通过静态方法调用。 System.Xml。XmlDocument 是一种特殊情况,无需标记为可序列化,而不管范围的事务属性如何。

    如何对System.Xml 进行特殊处理 。XmlDocument 工作:

    当用户定义 T 类型的变量 X 时,其中 TSystem.Xml。XmlDocument 或派生自System.Xml 的类。然后,XmlDocument 编译器会将 X 视为可序列化对象。

    序列化 X 时,运行时将保留以下信息: () 对象 X 的实际类型 Tr 引用 (b) 文档的 OuterXml 字符串。

    取消序列化 X 时,运行时将创建 Tr 的实例 (这假定构造函数不采用任何参数) ,并将调用 LoadXml ,为实例提供保存的 OuterXml。 然后,X 将设置为指向新创建的 Tr 实例。

另请参阅

中的