Partager via


WorkflowPersistenceService.SaveCompletedContextActivity(Activity) Méthode

Définition

En cas d'implémentation dans une classe dérivée, enregistre l'objectif achevé spécifié dans une banque de données.

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)

Paramètres

activity
Activity

Activity qui représente l'objectif achevé.

Exemples

L'exemple suivant illustre une implémentation de la méthode SaveCompletedContextActivity. Il provient de l'exemple de Custom Persistence Service, dans le fichier FilePersistenceService.cs. Pour plus d’informations, consultez Exemple de service de persistance personnalisée.

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

Remarques

Le moteur d'exécution de workflow enregistre l'état des activités d'objectif achevé pour implémentez la compensation. Vous devez appeler l'une des méthodes Save surchargées pour sérialiser l'activity dans une classe Stream ; vous pouvez choisir ensuite de traiter la classe encore plus Stream avant de l'écrire dans votre banque de données. Toutefois, lorsque le moteur d'exécution de workflow appelle la méthode LoadCompletedContextActivity, vous devez restaurer une copie identique de l'activité.

Vous devez être en mesure d'associer l'objectif achevé à son instance de workflow englobante pour marquer l'objectif comme non requis dans votre banque de données lorsque l'instance de workflow finit ou est interrompue. Par conséquent, vous devez également enregistrer la structure Guid de l'instance de workflow associée à l'objectif achevé ; vous pouvez l'obtenir de la propriété InstanceId de la classe WorkflowInstance associée à l'activity.

LoadCompletedContextActivity utilise le Guid de l'objectif achevé en tant que paramètre. Par conséquent, vous devez également enregistrer la propriété ContextGuid associée à l'activity. Cette propriété peut être référencée via le champ ActivityContextGuidProperty d'activity.

Si vous implémentez un service de persistance qui utilise un magasin fiable, afin de maintenir la cohérence avec l’état interne du moteur d’exécution de workflow, vous devez participer au traitement par lots de la transaction du workflow pour différer l’écriture réelle dans votre magasin fiable jusqu’à un point de la validation du workflow. Pour participer au traitement par lots, ajoutez un élément de travail à la propriété WorkBatch qui représente les modifications à apporter à la base de données et implémentez l’interface IPendingWork dans votre service de persistance.

Si vous ne pouvez pas enregistrer l'objectif achevé sur votre banque de données, vous devez lever une classe PersistenceException avec un message d'erreur approprié.

S’applique à