Share via


Gestione degli errori nei flussi di lavoro

La gestione degli errori in Windows Workflow Foundation consiste in una gestione asincrona delle eccezioni. Vale a dire che le eccezioni generate in un'attività sia in modo esplicito sia implicito vengono intercettate dal motore di runtime del flusso di lavoro e quindi pianificate in una coda da gestire in un secondo tempo. La differenza rispetto alla normale gestione delle eccezioni consiste nel fatto che, se viene generata un'eccezione in un blocco try, questa viene intercettata dal blocco catch exception corretto oppure viene generata immediatamente all'utente.

Cause delle eccezioni

In un flusso di lavoro le eccezioni possono essere generate con le modalità seguenti:

Intercettazione delle eccezioni

Nella gestione degli errori, se l'attività che ha generato l'eccezione non è in grado di gestirla, l'eccezione verrà trasferita alla relativa attività padre per la risoluzione. L'eccezione viene trasferita risalendo la gerarchia del flusso di lavoro finché non viene gestita oppure l'istanza del flusso di lavoro viene terminata dal motore di runtime del flusso di lavoro.

La gestione delle eccezioni viene eseguita dall'attività FaultHandlerActivity. Ogni attività FaultHandlerActivity è associata a un tipo di eccezione di .NET Framework e contiene inoltre un insieme di attività che vengono eseguite se l'eccezione generata corrisponde al tipo. Un'attività FaultHandlerActivity è impostata in un'attività FaultHandlersActivity contenente 0-n attività FaultHandlerActivity. L'attività FaultHandlersActivity può essere figlio di un'attività composita.

L'obiettivo della gestione degli errori di Windows Workflow Foundation è annullare il lavoro parziale e non completato correttamente di un'attività nella quale si è verificata un'eccezione. Il completamento dell'attività FaultHandlerActivity non è mai considerato un completamento corretto dell'attività associata. Vale a dire che, mentre l'attività FaultHandlerActivity è in esecuzione, l'attività che ha generato l'eccezione assume lo stato di errore. Una volta completata l'attività FaultHandlerActivity, l'attività associata assume lo stato chiuso. Anche le attività allo stesso livello dell'attività associata, ad esempio altri figli di un'attività ParallelActivity, assumono lo stato in annullamento e quindi passano allo stato chiuso. Non viene mai fornita loro la possibilità di essere eseguite correttamente.

Gestione degli errori e compensazione

La differenza tra gestione degli errori e compensazione consiste nel fatto che la compensazione può essere eseguita solo su un'attività completata correttamente, non su un'attività che ha generato un'eccezione e che è in stato di errore; tuttavia, l'attività CompensateActivity può essere eseguita in un'attività FaultHandlerActivity associata a un'attività che ha generato un'eccezione. Uno scenario tipico per la gestione della compensazione è, ad esempio, quando un'attività è stata completata correttamente, ma più avanti nel flusso di lavoro è stata generata un'eccezione in un'altra attività. Il gestore errori per tale attività contiene un oggetto CompensateActivity che annulla eventuali azioni eseguite in precedenza nel flusso di lavoro. Per estendere ulteriormente il concetto, è possibile rimborsare il denaro a un cliente dopo che un'altra attività ha generato un'eccezione ItemDiscontinuedException più avanti nel flusso di lavoro.

Per ulteriori informazioni sulla gestione degli errori, vedere Utilizzo dell'attività FaultHandlerActivity e Utilizzo dell’attività ThrowActivity..

Per ulteriori informazioni sulla gestione della compensazione, vedere Utilizzo dell'attività CompensateActivity.

Vedere anche

Riferimenti

ThrowActivity

Concetti

Utilizzo dell'attività FaultHandlerActivity
Utilizzo dell’attività ThrowActivity.

Altre risorse

Sviluppo dei flussi di lavoro

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.