Compartilhar via


WorkflowPersistenceService.SaveWorkflowInstanceState Método

Definição

Quando implementado em uma classe derivada, salva o estado da instância de fluxo de trabalho em um armazenamento de dados.

protected public:
 abstract void SaveWorkflowInstanceState(System::Workflow::ComponentModel::Activity ^ rootActivity, bool unlock);
protected internal abstract void SaveWorkflowInstanceState(System.Workflow.ComponentModel.Activity rootActivity, bool unlock);
abstract member SaveWorkflowInstanceState : System.Workflow.ComponentModel.Activity * bool -> unit
Protected Friend MustOverride Sub SaveWorkflowInstanceState (rootActivity As Activity, unlock As Boolean)

Parâmetros

rootActivity
Activity

A atividade raiz da instância de fluxo de trabalho.

unlock
Boolean

true se a instância do fluxo de trabalho não deve ser bloqueada; false se a instância do fluxo de trabalho deve ser bloqueada.

Comentários

Você deve chamar um dos métodos sobrecarregados Save para serializar rootActivity em um Stream. Em seguida, você pode optar por processar adicionalmente antes Stream de escrevê-lo em seu armazenamento de dados. No entanto, quando o mecanismo de runtime de fluxo de trabalho chama LoadWorkflowInstanceState, você deve restaurar uma cópia idêntica da atividade raiz. Se você não puder salvar o estado da instância de fluxo de trabalho em seu armazenamento de dados, deverá lançar uma PersistenceException mensagem de erro com uma mensagem de erro apropriada.

O mecanismo de runtime de fluxo de trabalho fornece semântica de bloqueio para restringir o acesso a um estado de instância de fluxo de trabalho salvo no armazenamento de dados. Isso pode ser acessado pelos serviços de persistência em execução em vários hosts e apontando para o mesmo armazenamento de dados. A semântica de bloqueio foi projetada para impedir que os serviços de persistência executados em dois runtimes de fluxo de trabalho diferentes carreguem a mesma instância de fluxo de trabalho na memória ao mesmo tempo. Dependendo do tipo de ambiente que seu serviço de persistência foi projetado para dar suporte, você pode escolher se deseja dar suporte a essa funcionalidade. Se você optar por dar suporte à semântica de bloqueio de tempo de execução, se um serviço de persistência tentar salvar um estado de instância de fluxo de trabalho bloqueado anteriormente por outro serviço de persistência, você deverá gerar um WorkflowOwnershipException. Se unlock estiver true, você deve desbloquear o acesso ao estado da instância do fluxo de trabalho depois de salvá-lo.

LoadWorkflowInstanceState usa a Guid instância do fluxo de trabalho como um parâmetro. Portanto, você deve salvar isso Guid. Você também pode usá-lo Guid para associar a instância de fluxo de trabalho aos estados salvos de seus escopos concluídos. Você deve fazer isso porque deve ser capaz de marcar esses escopos concluídos como desnecessários quando a instância do fluxo de trabalho for concluída.

O mecanismo de runtime de fluxo de trabalho chama SaveWorkflowInstanceState uma hora final quando a instância do fluxo de trabalho é concluída ou encerrada. Portanto, se GetWorkflowStatus for igual a Completed ou Terminated, você poderá excluir com segurança a instância de fluxo de trabalho e todos os escopos concluídos associados do armazenamento de dados. Como alternativa, você pode assinar os WorkflowCompleted eventos ou WorkflowTerminated para determinar quando é seguro excluir registros associados à instância de fluxo de trabalho. Se você realmente excluir os registros do armazenamento de dados depende da implementação.

Se você implementar 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, 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 que represente as alterações pendentes ao seu repositório durável à WorkBatch propriedade e implemente a IPendingWork interface em seu serviço de persistência.

Aplica-se a