WorkflowPersistenceService.SaveCompletedContextActivity(Activity) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在派生类中实现时,将指定的已完成作用域保存到数据存储区。
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)
参数
示例
下面的示例演示 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 关联的 WorkflowInstance 的 activity
属性中获取。
LoadCompletedContextActivity 将已完成作用域的 Guid 用作参数。 因此,还必须保存与 ContextGuid 关联的 activity
属性。 此属性可以通过 ActivityContextGuidProperty 的 activity
字段引用。
如果实现使用持久存储区的持久性服务,则为了保持与工作流运行时引擎的内部状态的一致性,你应该参与工作流事务批处理,以便将实际写入持久存储区的操作延迟到提交工作流时。 若要参与批处理,可将工作项添加到表示对数据库的挂起更改的 WorkBatch 属性,并在持久性服务中实现 IPendingWork 接口。
如果无法将已完成作用域保存到数据存储区,则应引发带有适当错误消息的 PersistenceException。