WorkflowPersistenceService.SaveCompletedContextActivity(Activity) Método

Definición

Cuando se implementa en una clase derivada, guarda en la memoria el ámbito completado especificado.

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)

Parámetros

activity
Activity

Activity que representa el ámbito completado.

Ejemplos

En el siguiente ejemplo se muestra una implementación del método SaveCompletedContextActivity. Este ejemplo pertenece a la muestra Servicio de persistencia personalizado, del archivo FilePersistenceService.cs. Para obtener más información, consulte Ejemplo de servicio de persistencia personalizada.

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

Comentarios

El motor en tiempo de ejecución de flujo de trabajo guarda el estado de las actividades del ámbito completadas para implementar la compensación. Debe llamar a uno de los métodos Save sobrecargados para serializar activity en Stream; a continuación, puede decidir procesar también Stream antes de escribirlo en su almacén de datos. Sin embargo, cuando el motor en tiempo de ejecución de flujo de trabajo llama LoadCompletedContextActivity, debe restaurar una copia idéntica de la actividad.

Debe poder asociar el ámbito completado a su instancia de flujo de trabajo envolvente para marcar el ámbito como innecesario en su almacén de datos cuando la instancia de flujo de trabajo termina o se finaliza. Por consiguiente, también debe guardar Guid de la instancia de flujo de trabajo que está asociada al ámbito completado; esto se puede obtener de la propiedad InstanceId de WorkflowInstance asociada a activity.

LoadCompletedContextActivity toma Guid del ámbito completado como un parámetro. Por consiguiente, también debe guardar la propiedad ContextGuid asociada a activity. Se puede hacer referencia a esta propiedad a través del campo ActivityContextGuidProperty de activity.

Si implementa un servicio de persistencia que utiliza un almacén duradero, para mantener la coherencia con el estado interno del motor en runtime del flujo de trabajo, debería participar en el procesamiento por lotes de las transacciones del flujo de trabajo para aplazar la escritura real a su almacén duradero hasta un punto de confirmación del flujo de trabajo. Para participar en procesamiento por lotes, agregue un elemento de trabajo a la propiedad WorkBatch que representa los cambios pendientes en la base de datos e implemente la interfaz IPendingWork en su servicio de persistencia.

Si no puede guardar el ámbito completado en su almacén de datos, debe iniciar PersistenceException con un mensaje de error adecuado.

Se aplica a