Поделиться через


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. Данный пример кода является частью примера «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 с соответствующим сообщением об ошибке.

Применяется к