WorkflowPersistenceService.SaveCompletedContextActivity(Activity) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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 activity
a 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.