Architettura del flusso di lavoro di Windows
Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.
Windows Workflow Foundation (WF) genera il livello di astrazione per lo sviluppo di applicazioni interattive con esecuzione prolungata. Le unità di lavoro vengono incapsulate come attività. Le attività vengono eseguite in un ambiente che fornisce funzionalità per il controllo del flusso, gestione delle eccezioni, propagazione degli errori, persistenza dei dati relativi allo stato, caricamento e scaricamento di flussi di lavoro in corso dalla memoria, rilevamento e flusso della transazione.
Architettura dell'attività
Le attività vengono sviluppate come tipi CLR che derivano dall'oggetto Activity, CodeActivity o NativeActivity o dalle relative varianti che restituiscono un valore, Activity, CodeActivity o NativeActivity. Lo sviluppo di attività che derivano dall'oggetto Activity consente all'utente di assemblare oggetti WorkflowElement preesistenti per creare rapidamente unità di lavoro che vengono eseguite nell'ambiente del flusso di lavoro. L'oggetto CodeActivity, d'altra parte, consente la creazione della logica di esecuzione nel codice gestito utilizzando l'oggetto CodeActivityContext principalmente per accedere agli argomenti delle attività. Lo sviluppo di attività che derivano dall'oggetto NativeActivity consente agli utenti di accedere al runtime tramite l'oggetto ActivityExecutionContext per funzionalità quali la pianificazione di elementi figlio, la creazione di segnalibri, il richiamo di lavori asincroni, la registrazione di transazioni e così via.
La creazione di attività che derivano dall'oggetto Activity è dichiarativa e questa attività possono essere create in XAML. Nell'esempio seguente viene creata un'attività denominata Prompt
utilizzando altre attività per il corpo dell'esecuzione.
<Activity x:Class='Prompt'
xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml'
xmlns:z='https://schemas.microsoft.com/netfx/2008/xaml/schema'
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns="https://schemas.microsoft.com/2009/workflow">
<z:SchemaType.Members>
<z:SchemaType.SchemaProperty Name='Text' Type=' InArgument(s:String)' />
<z:SchemaType.SchemaProperty Name='Response' Type='OutArgument(s:String)' />
</z:SchemaType.Members>
<Sequence>
<my:WriteLine Text='[Text]' />
<my:ReadLine Bookmark='r1' Result='[Response]' />
</Sequence>
</Activity>
Contesto di esecuzione dell'attività
L'oggetto ActivityExecutionContext rappresenta l'interfaccia tra l'autore di attività e l'esecuzione del flusso di lavoro e fornisce l'accesso alle numerose funzionalità di esecuzione. Nell'esempio seguente viene definita un'attività che utilizza il contesto di esecuzione per creare un segnalibro (meccanismo che consente a un'attività di registrare un punto di continuazione nella relativa esecuzione che può essere ripresa da un host che passa dati all'attività).
public class SimpleReadLine : WorkflowElement
{
protected override void Execute(ActivityExecutionContext context)
{
context.CreateBookmark(this. DisplayName,
new ActivityExecutionCallback(OnReadComplete));
}
void OnReadComplete(ActivityExecutionContext context, object state)
{
string dataRead = (string)state;
Console.WriteLine("You entered: {0}", dataRead);
}
}
Ciclo di vita dell'attività
Un'istanza di un'attività viene avviata nello stato Executing. A meno che non si verifichino eccezioni, rimane in questo stato finché non vengono completati l'esecuzione di tutte le attività figlio e qualsiasi altro lavoro in sospeso (ad esempio gli oggetti Bookmark); a questo punto passa allo stato Closed. L'elemento padre di un istanza dell'attività può richiedere l'annullamento di un elemento figlio. Se quest'ultimo può essere annullato, viene completato nello stato Canceled. Se durante l'esecuzione viene generata un'eccezione, il runtime inserisce l'oggetto WorkflowElement nello stato Faulted e propaga l'eccezione fino alla catena di attività padre. Di seguito sono riportati i tre stati di completamento di un'attività:
Closed: l'attività ha completato il proprio lavoro ed è stata chiusa.
Canceled: l'attività ha interrotto normalmente il proprio lavoro ed è stata chiusa. Quando viene immesso questo stato, il lavoro non viene sottoposto a rollback in modo esplicito.
Faulted: l'attività ha rilevato un errore ed è stata chiusa prima del completamento del lavoro.
Le attività rimangono nello stato Executing quando vengono rese persistenti o scaricate.