Concetti di base del flusso di lavoro di Windows
Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.
Nello sviluppo del flusso di lavoro in .NET Framework versione 4 vengono utilizzati concetti che potrebbero essere nuovi per alcuni sviluppatori. In questo argomento vengono descritti alcuni dei concetti e la relativa implementazione.
Flussi di lavoro e attività
Un flusso di lavoro è una raccolta strutturata di azioni che modella un processo. Ogni azione del flusso di lavoro viene modellata come un'attività. Un host interagisce con un flusso di lavoro utilizzando l'oggetto WorkflowInvoker per richiamare un flusso di lavoro come se si trattasse di un metodo, l'oggetto WorkflowInstance per controllare in modo esplicito l'esecuzione di una singola istanza del flusso di lavoro e l'oggetto WorkflowServiceHost per le interazioni basate su messaggi negli scenari a istanza multipla. Poiché i passaggi del flusso di lavoro sono definiti come una gerarchia di attività, si può affermare che l'attività in primo piano nella gerarchia definisce il flusso di lavoro stesso. Questo modello di gerarchia sostituisce le classi SequentialWorkflow e StateMachineWorkflow esplicite delle versioni precedenti. Le attività stesse vengono sviluppate come raccolte di altre attività (utilizzando la classe Activity come base che generalmente viene definita tramite XAML) oppure personalizzate tramite l'oggetto CodeActivity che può utilizzare il runtime per accedere ai dati oppure la classe NativeActivity che espone la varietà del runtime del flusso di lavoro all'autore di attività. Le attività sviluppate utilizzando le classi CodeActivity e NativeActivity vengono create tramite linguaggi conformi a CLR, ad esempio C#.
Modello di dati delle attività
Le attività archiviano e condividono i dati utilizzando i tipi mostrati nella tabella seguente.
Variabile |
Archivia i dati in un'attività. |
Argomento |
Sposta i dati all'interno e all'esterno di un'attività. |
Espressione |
Attività con un valore restituito elevato utilizzato nelle associazioni degli argomenti. |
Runtime del flusso di lavoro
Il runtime del flusso di lavoro è l'ambiente in cui vengono eseguiti i flussi di lavoro. L'oggetto WorkflowInvoker rappresenta il modo più semplice per eseguire un flusso di lavoro. L'host utilizza l'oggetto WorkflowInvoker per eseguire le operazioni seguenti:
Per richiamare in modo sincrono un flusso di lavoro.
Per fornire input o recuperare output da un flusso di lavoro.
Per aggiungere estensioni che devono essere utilizzate dalle attività.
L'oggetto ActivityInstance è il proxy thread-safe che gli host possono utilizzare per interagire con il runtime. L'host utilizza l'oggetto ActivityInstance per eseguire le operazioni seguenti:
Per acquisire un'istanza creandola o caricandola da un archivio di istanze.
Per ricevere una notifica sugli eventi del ciclo di vita delle istanze.
Per controllare l'esecuzione del flusso di lavoro.
Per fornire input o recuperare output da un flusso di lavoro.
Per segnalare la continuazione di un flusso di lavoro e passare i valori a tale flusso.
Per rendere persistenti i dati del flusso di lavoro.
Per aggiungere estensioni che devono essere utilizzate dalle attività.
Gli elementi del flusso di lavoro accedono all'ambiente di runtime di tale flusso tramite la classe ActivityExecutionContext. In questo modo possono risolvere argomenti e variabili, pianificare le attività figlio ed eseguire molte altre operazioni.
Servizi
I flussi di lavoro rappresentano un modo semplice per implementare e accedere ai servizi di Windows Communication Foundation (WCF) utilizzando le attività di messaggistica. I servizi del flusso di lavoro sono ospitati nell'oggetto WorkflowServiceHost.
Persistenza, scaricamento e flussi di lavoro con esecuzione prolungata
Il flusso di lavoro di Windows semplifica la creazione di programmi reattivi con esecuzione prolungata fornendo:
Attività che accedono all'input esterno.
Possibilità di creare oggetti Bookmark che possono essere ripresi da un listener di host.
Possibilità di rendere persistenti i dati di un flusso di lavoro e di scaricare quest'ultimo, quindi di ricaricarlo e riattivarlo in risposta alla ripresa di oggetti Bookmark in un particolare flusso di lavoro.
Un flusso di lavoro esegue continuamente attività finché non sono terminate o finché tutte le attività attualmente in esecuzione stanno aspettando l'input. In quest'ultimo caso, il flusso di lavoro è inattivo. È normale per un host scaricare i flussi di lavoro che sono diventati inattivi e ricaricarli quando viene ricevuto un messaggio che indica di continuare l'esecuzione. L'oggetto WorkflowServiceHost fornisce tale funzionalità, nonché i criteri estendibili di scaricamento. Per i blocchi di esecuzione tramite lo stato volatile o i dati che non possono essere resi persistenti in altri modi, un'attività può indicare a un host che non deve essere reso persistente utilizzando l'oggetto ActivityExecutionContext. Un flusso di lavoro può rendere esplicitamente persistenti i propri dati in un supporto di archiviazione durevole tramite l'attività Persist.