다음을 통해 공유


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 파일에 있는 Custom Persistence Service 샘플의 일부입니다. 자세한 내용은 Custom Persistence Service 샘플합니다.

// 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 메서드 중 하나를 호출하여 activityStream으로 serialize해야 합니다. 그런 다음 데이터 저장소에 쓰기 전에 추가로 Stream을 처리하도록 선택할 수 있습니다. 그러나 워크플로 런타임 엔진이 LoadCompletedContextActivity를 호출할 때 활동의 동일한 복사본을 복원해야 합니다.

워크플로 인스턴스가 완료되거나 종료될 때 데이터 저장소에서 해당 범위를 필요하지 않은 것으로 표시하려면 완료된 범위를 바깥쪽 워크플로 인스턴스와 연결할 수 있어야 합니다. 따라서 완료된 범위와 연결된 워크플로 인스턴스의 Guid도 저장해야 합니다. 이 값은 InstanceId와 연결된 WorkflowInstanceactivity 속성에서 가져올 수 있습니다.

LoadCompletedContextActivity는 완료된 범위의 Guid를 매개 변수로 사용합니다. 따라서 ContextGuid와 연결된 activity 속성도 저장해야 합니다. 이 속성은 ActivityContextGuidPropertyactivity 필드를 통해 참조할 수 있습니다.

영속 저장소를 사용하는 지속성 서비스를 구현하는 경우 워크플로 런타임 엔진의 내부 상태와 일관성을 유지하려면 워크플로 트랜잭션 일괄 처리에 참여하여 영속 저장소에 대한 실제 쓰기를 워크플로 커밋 점까지 지연해야 합니다. 일괄 처리에 참여하려면 데이터베이스에 대해 보류 중인 변경 내용을 나타내는 작업 항목을 WorkBatch 속성에 추가하고 지속성 서비스에 IPendingWork 인터페이스를 구현합니다.

완료된 범위를 데이터 저장소에 저장할 수 없는 경우 해당 오류 메시지와 함께 PersistenceException을 throw해야 합니다.

적용 대상