Condividi tramite


WorkflowPersistenceService.SaveCompletedContextActivity(Activity) Metodo

Definizione

Se implementato in una classe derivata, salva l'ambito completato specificato in un archivio dati.

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)

Parametri

activity
Activity

Classe Activity che rappresenta l'ambito compilato.

Esempio

Nell'esempio seguente viene illustrata un'implementazione del metodo SaveCompletedContextActivity. Questo esempio è tratto dall'esempio SDK Custom Persistence Service nel file FilePersistenceService.cs. Per altre informazioni, vedere Esempio di servizio di persistenza personalizzata.

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

Commenti

Il motore di runtime del flusso di lavoro salva lo stato delle attività dell'ambito completato per implementare la compensazione. È necessario chiamare uno dei metodi Save di overload per serializzare activity in un Stream; si può quindi scegliere anche di elaborare Stream prima di scriverlo nell'archivio dati. Tuttavia, quando il motore di runtime del flusso di lavoro chiama LoadCompletedContextActivity, è necessario ripristinare una copia identica dell'attività.

È necessario essere in grado di associare l'ambito completato all'istanza del flusso di lavoro che lo racchiude per contrassegnare l'ambito come non necessario nell'archivio dati quando l'istanza del flusso di lavoro finisce o viene terminata. È pertanto necessario salvare anche il Guid dell'istanza del flusso di lavoro associato all'ambito completato, che può essere ottenuto dalla proprietà InstanceId della classe WorkflowInstance associata a activity.

LoadCompletedContextActivity accetta il Guid dell'ambito completato come parametro. Di conseguenza, è necessario salvare la proprietà ContextGuid associata a activity. Può essere fatto riferimento a questa proprietà tramite il campo ActivityContextGuidProperty di activity.

Se si sta implementando un servizio di persistenza che utilizza un archivio durevole, per mantenere la coerenza con lo stato interno del motore di runtime del flusso di lavoro, è necessario partecipare all'inclusione in batch delle transazioni del flusso di lavoro per rinviare l'effettiva scrittura nell'archivio durevole fino a un punto di commit del flusso di lavoro. Per partecipare all'inclusione in batch, aggiungere un elemento di lavoro alla proprietà WorkBatch che rappresenta le modifiche in sospeso al database e implementare l'interfaccia IPendingWork nel servizio di persistenza.

Se non è possibile salvare l'ambito completato nell'archivio dati, è necessario generare un'eccezione PersistenceException con un messaggio di errore adatto.

Si applica a