WorkflowPersistenceService.SaveCompletedContextActivity(Activity) 方法

定义

在派生类中实现时,将指定的已完成作用域保存到数据存储区。

protected public:
 abstract void SaveCompletedContextActivity(System::Workflow::ComponentModel::Activity ^ activity);
protected internal abstract void SaveCompletedContextActivity (System.Workflow.ComponentModel.Activity activity);
abstract member SaveCompletedContextActivity : System.Workflow.ComponentModel.Activity -> unit
Protected Friend MustOverride Sub SaveCompletedContextActivity (activity As Activity)

参数

activity
Activity

表示已完成范围的 Activity

示例

下面的示例演示 SaveCompletedContextActivity 方法的实现。 此示例摘自 FilePersistenceService.cs 文件中的“自定义持久性服务”示例。 有关详细信息,请参阅 自定义持久性服务示例

// Save the completed activity state.
protected override void SaveCompletedContextActivity(Activity activity)
{
    Guid contextGuid = (Guid)activity.GetValue(Activity.ActivityContextGuidProperty);
    Console.WriteLine("Saving completed activity context: {0}", contextGuid);
    SerializeToFile(
        WorkflowPersistenceService.GetDefaultSerializedForm(activity), contextGuid);
}
' Save completed activity state
Protected Overrides Sub SaveCompletedContextActivity(ByVal activity As System.Workflow.ComponentModel.Activity)
    Dim contextGuid As Guid = CType(activity.GetValue(activity.ActivityContextGuidProperty), Guid)
    Console.WriteLine("Saving completed activity context: 0}", contextGuid)
    SerializeToFile( _
        WorkflowPersistenceService.GetDefaultSerializedForm(activity), contextGuid)
End Sub

注解

工作流运行时引擎保存已完成作用域活动的状态,以便实现补偿。 必须调用重载的 Save 方法之一,将 activity 序列化到 Stream 中;然后可以选择在将 Stream 写入到数据存储区之前,对其执行其他处理。 但是,在工作流运行时引擎调用 LoadCompletedContextActivity 时,必须还原活动的相同副本。

必须能够将已完成作用域与其涵盖的工作流实例关联,以便在工作流实例完成或终止时,在数据存储区中将作用域标记为不需要的作用域。 因此,还应该保存与已完成作用域关联的工作流实例的 Guid;这可以从与 InstanceId 关联的 WorkflowInstanceactivity 属性中获取。

LoadCompletedContextActivity 将已完成作用域的 Guid 用作参数。 因此,还必须保存与 ContextGuid 关联的 activity 属性。 此属性可以通过 ActivityContextGuidPropertyactivity 字段引用。

如果实现使用持久存储区的持久性服务,则为了保持与工作流运行时引擎的内部状态的一致性,你应该参与工作流事务批处理,以便将实际写入持久存储区的操作延迟到提交工作流时。 若要参与批处理,可将工作项添加到表示对数据库的挂起更改的 WorkBatch 属性,并在持久性服务中实现 IPendingWork 接口。

如果无法将已完成作用域保存到数据存储区,则应引发带有适当错误消息的 PersistenceException

适用于