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)
Параметры
Примеры
В следующем примере показана реализация метода SaveCompletedContextActivity
. Данный пример кода является частью примера «Custom Persistence Service» из файла 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
. На это свойство можно указать ссылкой через поле ActivityContextGuidPropertyactivity
.
При реализации службы постоянного хранения, использующей постоянное хранилище, для поддержки целостности с внутренним состоянием подсистемы среды выполнения рабочих процессов необходимо принять участие в пакетировании транзакции рабочего процесса, чтобы отложить фактическую запись в постоянное хранилище до точки фиксации рабочего процесса. Для принятия участия в пакетировании добавьте рабочий элемент в свойство WorkBatch, представляющее ожидающие изменения, в базу данных и реализуйте интерфейс IPendingWork в службе постоянного хранения.
Если завершенную область невозможно сохранить в хранилище данных, необходимо вызвать исключение PersistenceException с соответствующим сообщением об ошибке.