Share via


WorkflowPersistenceService.SaveCompletedContextActivity(Activity) Methode

Definition

Bei Implementierung in einer abgeleiteten Klasse, wird der angegebene abgeschlossene Bereich in einen Datenspeicher geladen.

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)

Parameter

activity
Activity

Activity, die den abgeschlossenen Bereich darstellt.

Beispiele

Im folgenden Beispiel wird eine Implementierung der SaveCompletedContextActivity-Methode gezeigt. Dieses Beispiel stammt aus dem Beispiel zum benutzerdefinierten Persistenzdienst in der Datei FilePersistenceService.cs. Weitere Informationen finden Sie unter Beispiel für den benutzerdefinierten Persistenzdienst.

// 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

Hinweise

Die Workflowruntime-Engine speichert zum Implementieren der Kompensation den Zustand von Aktivitäten des abgeschlossenen Bereichs. Sie müssen zum Serialisieren von Save eine der überladenen activity-Methoden in einen Stream laden. Anschließend können Sie den Stream weiter verarbeiten, bevor Sie ihn in den Datenspeicher laden. Wenn jedoch die Workflowruntime-Engine LoadCompletedContextActivity aufruft, müssen Sie eine identische Kopie der Aktivität wiederherstellen.

Der abgeschlossene Bereich muss der Workflowinstanz, die ihn einschließt, zugeordnet werden können, damit Sie den Bereich beim Abschließen oder Beenden der Workflowinstanz im Datenspeicher als nicht erforderlich markieren können. Speichern Sie deshalb auch die Guid der Workflowinstanz, die dem abgeschlossenen Bereich zugeordnet ist. Sie erhalten die GUID über die InstanceId-Eigenschaft der WorkflowInstance, die activity zugeordnet ist.

LoadCompletedContextActivity übernimmt die Guid des abgeschlossenen Bereichs als Parameter. Speichern Sie deshalb auch die ContextGuid zugeordnete activity-Eigenschaft. Auf diese Eigenschaft kann durch das ActivityContextGuidProperty-Feld von activity verwiesen werden.

Verwenden Sie die Batchverarbeitung für Workflowtransaktionen, wenn Sie einen Persistenzdienst implementieren, der einen permanenten Speicher verwendet. Dadurch wird die Konsistenz mit dem internen Zustand der Workflowruntime-Engine aufrechterhalten, indem der tatsächliche Schreibvorgang bis zu einem Commitpunkt des Workflows verzögert wird. Damit die Batchverarbeitung für Workflowtransaktionen verwendet wird, fügen Sie der WorkBatch-Eigenschaft ein Arbeitselement hinzu, die die ausstehenden Änderungen an der Datenbank darstellt. Implementieren Sie außerdem die IPendingWork-Schnittstelle in Ihrem Persistenzdienst.

Wenn Sie den abgeschlossenen Bereich nicht im Datenspeicher speichern können, lösen Sie PersistenceException in Verbindung mit einer entsprechenden Meldung aus.

Gilt für: