Instâncias são persistentes de fluxo de trabalho
Quando uma nova instância de um fluxo de trabalho é criada que persiste seu estado em SqlWorkflowInstanceStore, o host serviço cria uma entrada para o serviço no armazenamento de instância. Posteriormente, quando a instância do fluxo de trabalho é mantida pela primeira vez, SqlWorkflowInstanceStore armazena o estado atual da instância. Se o fluxo de trabalho é hospedado no serviço de ativação de processo do Windows, os dados de implantação de serviço são gravados também para o armazenamento de instância quando a instância é mantida pela primeira vez.
Como a instância de fluxo de trabalho não foi mantida, está em um estado não mantido. Quando nesse estado, a instância de fluxo de trabalho não pode ser recuperada após um domínio de aplicativo se recicla, falha do host, ou falha do computador.
O estado não persistente
As instâncias duráveis de fluxo de trabalho que não foram persistentes permanecem em um estado não mantido nos seguintes casos:
Falhas de host serviço antes de instância de fluxo de trabalho são mantidas pela primeira vez. O de instância de fluxo de trabalho na instância armazenam e não são recuperadas. Se uma mensagem correlacionada chega, a instância de fluxo de trabalho se torna ativa novamente.
A instância de fluxo de trabalho apresenta uma exceção antes de ser mantidas pela primeira vez. Como UnhandledExceptionAction retornado, os seguintes cenários ocorrem:
UnhandledExceptionAction é definido como Abort: Quando ocorre uma exceção, informações de implantação de serviço é escrita para o armazenamento de instância, e a instância de fluxo de trabalho é descarregada de memória. O de instância de fluxo de trabalho em um estado não persistido e não podem ser recarregadas.
UnhandledExceptionAction é definido como Cancel ou a Terminate: Quando ocorre uma exceção, informações de implantação de serviço é escrita para o armazenamento de instância, e o estado da instância da atividade é definido como Closed.
Para minimizar o risco de localizar instâncias são persistentes descarregadas de fluxo de trabalho, recomendamos persistir o fluxo de trabalho no início em seu ciclo de vida.
Detecção e remoção de instâncias são persistentes
SqlWorkflowInstanceStore não remove quaisquer instâncias são mantidas de fluxo de trabalho da instância. Também não remove quaisquer proprietários expiradas de bloqueio que não persistiram as instâncias de fluxo de trabalho associados com eles.
Recomendamos que o administrador verifica periodicamente o armazenamento de instância para instâncias são persistentes. Os administradores podem remover essas instâncias da instância como sabem que esse fluxo de trabalho não receberá mensagens correlacionadas. Por exemplo, se a instância foi na base de dados por vários meses e se souber que o fluxo de trabalho normalmente tem um tempo de vida de vários dias, seria seguro suponha que isso foi inicializada uma instância que falhasse.
Para localizar ocorrências são mantidas na instância Store de fluxo de trabalho do SQL você pode usar as seguintes consultas SQL:
Esta consulta localiza todas as instâncias que não foram persistentes, e retorna a hora de identificação e de criação (armazenados na hora UTC) para eles.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0
Esta consulta localiza todas as instâncias que não foram persistentes, e não é carregado, e retorna a hora de identificação e de criação (armazenados na hora UTC) para eles.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and CurrentMachine is NULL
Esta consulta localiza todas as instâncias suspensas que não foram persistentes, e retorna a identificação, o tempo de criação (armazenados na hora UTC), a razão de suspensão, e o nome da exceção para eles.
select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and IsSuspended = 1
Use cuidado quando você estiver excluindo instâncias são persistentes. Geralmente, é seguro remover instâncias são persistentes criadas por WorkflowServiceHost que são suspensas ou não carregadas. Essas instâncias específicas podem ser excluídas de armazenamento excluindo os do modo de [System.Activities.DurableInstancing].[Instances]
usando o seguinte comando SQL, substituindo a identificação correta de instância
delete [System.Activities.DurableInstancing].[Instances]
where InstanceId=’078a9bc4-ada5-4f9e-8cce-b0eb0009995f’
Aviso
Não recomendamos remover todas as instâncias são persistentes porque isso inclui instâncias que foram criados e apenas para ter sido persistente ainda não.