Compartilhar via


WorkflowPersistenceService.SaveCompletedContextActivity(Activity) Método

Definição

Quando implementada em uma classe derivada, salva o escopo concluído especificado em um armazenamento de dados.

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

Uma Activity que representa o escopo concluído.

Exemplos

O exemplo a seguir demonstra uma implementação do SaveCompletedContextActivity método . Este exemplo é do exemplo de Serviço de Persistência Personalizada, do arquivo FilePersistenceService.cs. Para obter mais informações, consulte Exemplo de serviço de persistência personalizado.

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

Comentários

O mecanismo de runtime de fluxo de trabalho salva o estado das atividades de escopo concluídas para implementar a compensação. Você deve chamar um dos métodos sobrecarregados Save para serializar activity em um Stream; você pode optar por processar adicionalmente o Stream antes de escrevê-lo em seu armazenamento de dados. No entanto, quando o mecanismo de runtime de fluxo de trabalho chama LoadCompletedContextActivity, você deve restaurar uma cópia idêntica da atividade.

Você deve ser capaz de associar o escopo concluído à instância de fluxo de trabalho delimitador para marcar o escopo como desnecessário no armazenamento de dados quando a instância de fluxo de trabalho for concluída ou encerrada. Portanto, você também deve salvar o Guid da instância de fluxo de trabalho associada ao escopo concluído; isso pode ser obtido da InstanceId propriedade do WorkflowInstance associado a activity.

LoadCompletedContextActivity usa o Guid do escopo concluído como um parâmetro. Portanto, você também deve salvar a propriedade associada activitya ContextGuid . Essa propriedade pode ser referenciada por meio do ActivityContextGuidProperty campo de activity.

Se você estiver implementando um serviço de persistência que usa um repositório durável, para manter a consistência com o estado interno do mecanismo de runtime de fluxo de trabalho, você deverá participar do envio em lote de transações de fluxo de trabalho para adiar a gravação real em seu repositório durável até um ponto de confirmação de fluxo de trabalho. Para participar do envio em lote, adicione um item de trabalho à WorkBatch propriedade que representa as alterações pendentes no banco de dados e implemente a IPendingWork interface em seu serviço de persistência.

Se você não puder salvar o escopo concluído em seu armazenamento de dados, deverá lançar um com uma PersistenceException mensagem de erro apropriada.

Aplica-se a