Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La InstanceLockedExceptionAction proprietà dell'archivio di istanze del flusso di lavoro SQL consente di specificare l'azione che il provider di persistenza SQL deve eseguire quando riceve un oggetto InstanceLockedException. Il provider di persistenza riceve questa eccezione quando tenta di bloccare un'istanza del servizio flusso di lavoro attualmente bloccata da un altro host del servizio. I valori per questa proprietà sono NoRetry, BasicRetrye AggressiveRetry. Il valore predefinito è NoRetry. L'elenco seguente descrive le tre opzioni:
NoRetry. L'host del servizio non tenta di bloccare l'istanza del servizio flusso di lavoro e passa l'oggetto InstanceLockedException al chiamante. Se il flusso di lavoro rimane in memoria per un periodo superiore a 60 secondi, usare NoRetry come tentativo. Il valore predefinito è NoRetry.
BasicRetry. L'host del servizio esegue nuovamente il tentativo di bloccare l'istanza del servizio flusso di lavoro con un intervallo lineare tra i tentativi e passa InstanceLockedException al chiamante alla fine della sequenza. Se il flusso di lavoro rimane in memoria circa tra 5 e 60 secondi e i messaggi arrivano in batch in cui è più probabile che i messaggi vengano inviati alla stessa istanza nello stesso host per elaborare tutti i messaggi prima di scaricare il flusso di lavoro, usare BasicRetry per ottenere la latenza migliore senza sprecare risorse.
AggressiveRetry. L'host del servizio esegue di nuovo il tentativo per bloccare l'istanza del servizio flusso di lavoro con un intervallo di backoff esponenziale tra i tentativi e passa l'eccezione al chiamante alla fine della sequenza. Se il flusso di lavoro rimane in memoria per un tempo molto breve (inferiore a 5 secondi) o una Web farm è grande e la probabilità che un altro messaggio venga recapitato allo stesso host non è molto elevato, usare AggressiveRetry per ottenere la migliore latenza.
La funzionalità Azione eccezione bloccata dell'istanza supporta gli scenari seguenti. In tutti gli scenari, se la proprietà instanceLockedExceptionAction di SqlWorkflowInstanceStore è impostata su BasicRetry o AggressiveRetry, l'host ritenta in modo trasparente per acquisire periodicamente il blocco sulle istanze.
Abilitazione dell'arresto normale e del riciclo sovrapposto dei domini applicazione. Si supponga che un AppDomain con un host del servizio che esegue istanze del servizio flusso di lavoro venga riciclato e che venga generato un nuovo AppDomain per gestire le nuove richieste in parallelo mentre il vecchio AppDomain viene ridotto normalmente. L'arresto attende fino a quando le istanze del servizio flusso di lavoro non sono inattive e quindi salvano e scaricano le istanze. Qualsiasi tentativo da parte degli host nel nuovo AppDomain di bloccare un'istanza causerà un oggetto InstanceLockedException.
Ridimensionamento orizzontale di flussi di lavoro durevoli in una farm omogenea di server. Si supponga che un nodo di una server farm in cui un'istanza del flusso di lavoro sia in esecuzione si arresti in modo anomalo e che l'host del flusso di lavoro non possa rimuovere i blocchi nell'istanza in cui è in esecuzione. Quando un host del servizio in esecuzione in un altro nodo della farm riceve un messaggio per l'istanza del flusso di lavoro, tenta di acquisire blocchi in queste istanze riceverà .InstanceLockedException I blocchi scadono dopo un certo periodo di tempo perché l'host che doveva rinnovare il blocco non esiste più.
Ridimensionamento orizzontale di flussi di lavoro durevoli in una farm omogenea di server. Si supponga di voler ridimensionare orizzontalmente un flusso di lavoro durevole usando più host dietro un bilanciamento carico di rete (Network Load Balancer), l'host del flusso di lavoro in esecuzione in un nodo della farm carica un'istanza del flusso di lavoro ed elabora un messaggio e il messaggio successivo all'istanza viene instradato all'host in esecuzione in un altro nodo perché bilanciamento carico di rete non dispone dell'algoritmo di routing per recapitare messaggi all'host che sta già eseguendo l'istanza. Al momento della ricezione del messaggio, il secondo host tenta di caricare l'istanza del flusso di lavoro e riceve perché InstanceLockedException il primo host ha un blocco sull'istanza. Il primo host sblocca l'istanza al termine dell'elaborazione del primo messaggio e il secondo host acquisisce il blocco quando ritenta la volta successiva, carica l'istanza ed elabora il secondo messaggio.