Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A InstanceLockedExceptionAction propriedade do SQL Workflow Instance Store permite-lhe especificar que ação o fornecedor de persistência SQL deve tomar quando recebe um InstanceLockedExceptionarquivo . O fornecedor de persistência recebe esta exceção quando tenta bloquear uma instância de serviço de workflow que está atualmente bloqueada por outro host de serviço. Os valores para esta propriedade são NoRetry, BasicRetry, e AggressiveRetry. O valor predefinido é NoRetry. A lista seguinte descreve as três opções:
NoRetry. O anfitrião do serviço não tenta bloquear a instância de serviço do fluxo de trabalho e passa-a InstanceLockedException para o chamador. Se o seu fluxo de trabalho permanecer na memória por um período superior a 60 segundos, use NoRetry como retentativa. O valor predefinido é NoRetry.
BasicRetry. O anfitrião do serviço tenta novamente bloquear a instância de serviço do fluxo de trabalho com um intervalo linear entre tentativas de retentativa e passa a instância InstanceLockedException para o chamador no final da sequência. Se o seu fluxo de trabalho permanecer na memória aproximadamente entre 5 a 60 segundos, e as mensagens chegarem em lotes, onde é mais provável que as mensagens enviadas para a mesma instância no mesmo host processem todas as mensagens antes de descarregar o fluxo, use BasicRetry para obter a melhor latência sem desperdiçar recursos.
AggressiveRetry. O anfitrião do serviço tenta novamente bloquear a instância do serviço de workflow com um intervalo de backoff exponencial entre tentativas de retentativa e passa a exceção ao chamador no final da sequência. Se o seu fluxo de trabalho permanecer na memória por um período muito curto (menos de 5 segundos), ou se uma Web farm for grande e a probabilidade de outra mensagem ser entregue ao mesmo host não for muito alta, use AggressiveRetry para obter a melhor latência.
A funcionalidade Instance Locked Exception Action suporta os seguintes cenários. Em todos os cenários, se a propriedade instanceLockedExceptionAction do SqlWorkflowInstanceStore estiver definida para BasicRetry ou AggressiveRetry, o host tenta de forma transparente adquirir periodicamente o lock on as instâncias.
Permitindo um desligamento e reciclagem sobreposta de domínios de aplicação com facilidade. Suponha que um AppDomain com um anfitrião de serviço a executar instâncias de serviço de workflow está a ser reciclado e um novo AppDomain é criado para gerir novos pedidos em paralelo, enquanto o antigo AppDomain é desativado de forma elegante. O encerramento espera até que as instâncias de serviço de workflow fiquem inativas, e depois persiste e descarrega as instâncias. Qualquer tentativa dos hosts no novo AppDomain de bloquear uma instância causará um InstanceLockedException.
Escalar horizontalmente fluxos de trabalho duráveis numa quinta homogénea de servidores. Suponha que um nó de uma farm de servidores onde uma instância de workflow está a correr crasha e o host do workflow não consegue remover bloqueios na instância que está a executar. Quando um host de serviço a correr noutro nó da farm recebe uma mensagem para essa instância de workflow, tenta adquirir bloqueios nessas instâncias e receberá o InstanceLockedException. Os bloqueios expiram passado algum tempo porque o anfitrião que deveria renovar o bloqueio já não existe.
Escalar horizontalmente fluxos de trabalho duráveis numa quinta homogénea de servidores. Suponha que queres escalar horizontalmente um fluxo de trabalho duradouro usando múltiplos hosts atrás de um NLB (Network Load Balancer), o host do workflow a correr num nó da farm carrega uma instância de workflow e está a processar uma mensagem, e a próxima mensagem para a instância é encaminhada para o host que está a correr noutro nó porque o NLB não tem um algoritmo de encaminhamento para entregar mensagens ao host que já está a correr a instância. Ao receber a mensagem, o segundo host tenta carregar a instância do workflow e recebe o InstanceLockedException porque o primeiro host tem um bloqueio na instância. O primeiro host desbloqueia a instância quando esta termina de processar a primeira mensagem e o segundo host adquire o bloqueio quando tenta novamente a próxima vez, carrega a instância e processa a segunda mensagem.