WorkflowPersistenceService.SaveWorkflowInstanceState Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Quando implementado numa classe derivada, guarda o estado da instância do fluxo de trabalho num 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 do workflow.
- unlock
- Boolean
true se a instância do fluxo de trabalho não deve estar bloqueada; false se a instância de workflow deve estar bloqueada.
Observações
Deve chamar um dos métodos sobrecarregados Save para serializar rootActivity num Stream. Pode então optar por processar ainda mais o Stream processo antes de o escrever no seu armazenamento de dados. No entanto, quando o motor de execução do workflow chama LoadWorkflowInstanceState, deve restaurar uma cópia idêntica da atividade raiz. Se não conseguir guardar o estado da instância do fluxo de trabalho no seu armazenamento de dados, deve enviar uma PersistenceException mensagem de erro apropriada.
O motor de execução de workflow fornece semântica de bloqueio para restringir o acesso a um estado de instância de workflow que está guardado no armazenamento de dados. Este pode ser acedido pelos serviços de persistência que correm em múltiplos hosts e apontam para o mesmo armazenamento de dados. A semântica de bloqueio foi concebida para impedir que serviços de persistência que correm em dois tempos de execução de workflow diferentes carreguem a mesma instância de workflow na memória ao mesmo tempo. Dependendo do tipo de ambiente que o seu serviço de persistência foi concebido para suportar, pode optar por suportar esta funcionalidade. Se optar por suportar a semântica de bloqueio em tempo de execução, então, se um serviço de persistência tentar guardar um estado de instância de workflow que já foi bloqueado anteriormente por outro serviço de persistência, deve lançar um WorkflowOwnershipException. Se unlock for true, deves desbloquear o acesso ao estado da instância do workflow depois de o guardares.
LoadWorkflowInstanceState Toma o Guid da instância do fluxo de trabalho como parâmetro. Por isso, deve guardar este Guid. Também pode usar isto Guid para associar a instância do workflow aos estados guardados dos seus escopos concluídos. Tem de fazer isto porque deve ser capaz de marcar estes escopos concluídos como desnecessários quando a instância do fluxo de trabalho terminar.
O motor de execução do workflow chama SaveWorkflowInstanceState um último momento em que a instância do workflow é concluída ou terminada. Portanto, se GetWorkflowStatus for igual a Completed ou Terminated, pode eliminar em segurança a instância do fluxo de trabalho e todos os seus escopos concluídos associados do seu armazenamento de dados. Em alternativa, pode subscrever os WorkflowCompleted eventos ou WorkflowTerminated para determinar quando é seguro eliminar registos associados à instância do fluxo de trabalho. Se realmente elimina os registos do seu armazenamento de dados depende da sua implementação.
Se implementares um serviço de persistência que utiliza um armazenamento duradouro, então, para manter a consistência com o estado interno do motor de execução do workflow, deves participar no batch de transações do workflow para adiar a escrita real para o teu storage durável até ao ponto de commit do workflow. Para participar no batching, adicione um item de trabalho que represente as alterações pendentes ao seu armazenamento durável da WorkBatch propriedade e implemente a IPendingWork interface no seu serviço de persistência.