Instance Locked Exception Action
Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.
La proprietà Instance Locked Exception Action dell'archivio di istanze del flusso di lavoro SQL consente di specificare l'azione che il provider di persistenza SQL deve intraprendere quando riceve un'eccezione InstanceLockedException. Il provider di persistenza riceve questa eccezione quando tenta di bloccare un'istanza del servizio flusso di lavoro che è attualmente bloccata da un altro host del servizio. I valori consentiti per questa proprietà sono No Retry, Basic Retry e Aggressive Retry. L'impostazione predefinita è No Retry. Nell'elenco seguente vengono descritte le tre opzioni:
No Retry (valore predefinito). Il provider di persistenza non tenta di nuovo di bloccare l'istanza e passa l'eccezione InstanceLockedException al chiamante.
Basic Retry. Il provider di persistenza tenta di nuovo di bloccare l'istanza con un intervallo di tentativi lineare e riesce a bloccare l'istanza oppure passa l'eccezione InstanceLockedException al chiamante alla fine della sequenza.
Aggressive Retry. Il provider di persistenza tenta di nuovo di bloccare l'istanza con un ritardo che aumenta in modo esponenziale e riesce a bloccare l'istanza oppure passa l'eccezione InstanceLockedException al chiamante alla fine della sequenza. Gli intervalli sono brevi all'inizio nel tentativo di acquisire il blocco il più rapidamente possibile e diventano più lunghi a ogni tentativo non riuscito.
La funzionalità Instance Locked Exception Action supporta gli scenari seguenti. In tutti gli scenari, se la proprietà instanceLockedExceptionAction dell'oggetto SqlWorkflowInstanceStore viene impostata su BasicRetry o AggressiveRetry, l'host tenta di nuovo di acquisire periodicamente e in modo trasparente il blocco sulle istanze.
Abilitazione dell'arresto normale e del riciclo sovrapposto di domini dell'applicazione. Si supponga che un oggetto AppDomain con un host del servizio in cui sono in esecuzione le istanze del servizio flusso di lavoro sia in fase di riciclo e che venga visualizzato un nuovo oggetto AppDomain per gestire le nuove richieste mentre l'oggetto AppDomain precedente non è più disponibile. L'arresto attende finché le istanze del servizio flusso di lavoro non sono inattive, quindi le istanze vengono rese persistenti e scaricate. Qualsiasi tentativo di bloccare un'istanza da parte degli host nel nuovo oggetto AppDomain genererà un'eccezione InstanceLockedException.
Ridimensionamento orizzontale dei flussi di lavoro durevoli in una farm omogenea di server. Si supponga che un nodo di una server farm in cui è in esecuzione un'istanza del flusso di lavoro venga arrestato in modo anomalo e l'host del flusso di lavoro non possa rimuovere i blocchi sull'istanza che sta eseguendo. Quando un host del servizio che è in esecuzione in un altro nodo della farm riceve un messaggio per l'istanza di quel flusso di lavoro, tenta di acquisire i blocchi su queste istanze e riceverà l'eccezione InstanceLockedException. I blocchi scadranno dopo un po' di tempo perché l'host che doveva rinnovare il blocco non esiste più.
Ridimensionamento orizzontale dei flussi di lavoro durevoli in una farm omogenea di server. Si supponga di voler ridimensionare orizzontalmente un flusso di lavoro durevole utilizzando più host in un bilanciamento del carico di rete (NLB), che l'host del flusso di lavoro in esecuzione in un nodo della farm carichi un'istanza del flusso di lavoro e stia elaborando un messaggio e che il successivo messaggio all'istanza venga indirizzato all'host in esecuzione in un altro nodo perché il bilanciamento del carico di rete non dispone dell'algoritmo di routing per recapitare i messaggi all'host che sta già eseguendo l'istanza. Dopo la ricezione del messaggio, il secondo host tenta di caricare l'istanza del flusso di lavoro e riceve l'eccezione InstanceLockedException perché il primo host dispone di un blocco sull'istanza. Il primo host sblocca l'istanza quando l'elaborazione del primo messaggio è completata e il secondo host acquisisce il blocco quando ritenta la volta successiva, carica l'istanza ed elabora il secondo messaggio.