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.
Windows Workflow Foundation (WF) genera il livello di astrazione per lo sviluppo di applicazioni interattive a 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, la gestione delle eccezioni, la propagazione degli errori, la persistenza dei dati sullo stato, il caricamento e lo scaricamento di flussi di lavoro in corso dalla memoria, dal rilevamento e dal flusso delle transazioni.
Architettura delle attività
Le attività vengono sviluppate come tipi CLR che derivano da Activity, CodeActivityAsyncCodeActivity, o NativeActivityo dalle relative varianti che restituiscono un valore, Activity<TResult>, CodeActivity<TResult>AsyncCodeActivity<TResult>, o NativeActivity<TResult>. Lo sviluppo di attività che derivano da Activity consente all'utente di assemblare attività preesistenti per creare rapidamente unità di lavoro eseguite nell'ambiente del flusso di lavoro. CodeActivity, d'altra parte, consente di creare la logica di esecuzione nel codice gestito usando CodeActivityContext principalmente per l'accesso agli argomenti dell'attività. AsyncCodeActivity è simile a CodeActivity tranne che può essere usato per implementare attività asincrone. Lo sviluppo di attività che derivano da NativeActivity consente agli utenti di accedere al runtime tramite il NativeActivityContext per funzionalità come la pianificazione di elementi figlio, la creazione di segnalibri, l'esecuzione di lavoro asincrono, la registrazione di transazioni e altro ancora.
Le attività di creazione che derivano da Activity sono dichiarative e queste attività possono essere create in XAML. Nell'esempio seguente, un'attività chiamata Prompt viene creata utilizzando altre attività come corpo dell'esecuzione.
<Activity x:Class='Prompt'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:z='http://schemas.microsoft.com/netfx/2008/xaml/schema'
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns="http://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 BookmarkName='r1' Result='[Response]' />
</Sequence>
</Activity>
Contesto dell'attività
ActivityContext è l'interfaccia dell'autore dell'attività per il runtime del flusso di lavoro e fornisce l'accesso all'ampia gamma di funzionalità del runtime. Nell'esempio seguente viene definita un'attività che usa il contesto di esecuzione per creare un segnalibro (il meccanismo che consente a un'attività di registrare un punto di continuazione nell'esecuzione che può essere ripreso da un host che passa dati all'attività).
public sealed class ReadLine : NativeActivity<string>
{
[RequiredArgument]
public InArgument<string> BookmarkName { get; set; }
protected override void Execute(NativeActivityContext context)
{
// Create a Bookmark and wait for it to be resumed.
context.CreateBookmark(BookmarkName.Get(context),
new BookmarkCallback(OnResumeBookmark));
}
// NativeActivity derived activities that do asynchronous operations by calling
// one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext
// must override the CanInduceIdle property and return true.
protected override bool CanInduceIdle
{
get { return true; }
}
public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
{
// When the Bookmark is resumed, assign its value to
// the Result argument.
Result.Set(context, (string)obj);
}
Ciclo di vita delle attività
Un'istanza di un'attività inizia nello stato Executing. A meno che non vengano rilevate eccezioni, rimane in questo stato finché tutte le attività secondarie non vengono completate e tutte le altre operazioni in sospeso (Bookmark oggetti, ad esempio) vengono completate, a quel punto passa allo stato Closed. Il genitore di un'istanza di attività può richiedere l'annullamento di un figlio; se il figlio può essere annullato, viene completato nello stato Canceled. Se viene generata un'eccezione durante l'esecuzione, il runtime mette l'attività nello stato Faulted e propaga l'eccezione in cima alla catena padre di attività. Di seguito sono riportati i tre stati di completamento di un'attività:
Chiuso: L'attività ha completato il lavoro ed è stata chiusa.
Annullato: L'attività ha abbandonato il suo lavoro in modo corretto ed è uscita. Il rollback del lavoro non viene eseguito in modo esplicito quando si entra in questo stato.
Errore: L'attività ha rilevato un errore ed è stata chiusa senza completare il suo lavoro.
Le attività rimangono nello Executing stato quando vengono mantenute o scaricate.