Condividi tramite


Concetti di base del flusso di lavoro di Windows

Nello sviluppo del flusso di lavoro in .NET Framework 4.6.1 vengono usati 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 usando l'oggetto WorkflowInvoker per richiamare un flusso di lavoro come se si trattasse di un metodo, l'oggetto WorkflowApplication 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à (usando la classe Activity come base che generalmente viene definita tramite XAML) oppure personalizzate tramite la classe CodeActivity che può usare 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 usando 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 usando i tipi mostrati nella tabella seguente.

Tipo Descrizione
Variabile Archivia i dati in un'attività.
Argomento Sposta i dati all'interno e all'esterno di un'attività.
Expression Attività con un valore restituito elevato usato nelle associazioni degli argomenti.

Fase di esecuzione flusso di lavoro

Il runtime del flusso di lavoro è un ambiente in cui vengono eseguiti i flussi di lavoro. WorkflowInvoker è la modalità di base per eseguire un flusso di lavoro. L'host usa 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 usate dalle attività.

L'oggetto ActivityInstance è il proxy thread-safe che gli host possono usare per interagire con il runtime. L'host usa 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 usate dalle attività.

Le attività accedono all'ambiente di runtime del flusso di lavoro tramite la classe derivata ActivityContext appropriata, quale NativeActivityContext o CodeActivityContext. 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 a servizi loosely-coupled usando le attività di messaggistica. Le attività di messaggistica si basano su WCF e sono il meccanismo principale usato per ottenere dati all'interno e all'esterno di un flusso di lavoro. È possibile comporre insieme attività di messaggistica per modellare qualsiasi tipo di modello di scambio di messaggi desiderato. Per altre informazioni, vedere Attività di messaggistica. I servizi flusso di lavoro sono ospitati usando la classe WorkflowServiceHost. Per altre informazioni, vedere Panoramica dell'hosting dei servizi flusso di lavoro. Per altre informazioni sui servizi flusso di lavoro, vedere Servizi flusso di lavoro

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 che i flussi di lavoro che si trovano nello stato di inattività vengono scaricati e ricaricati dall'host per continuare l'esecuzione quando arriva un messaggio. WorkflowServiceHost fornisce la funzionalità per questa funzione e fornisce un criterio estendibile di scaricamento. Per i blocchi di esecuzione che usando dati allo stato volatile o altri dati che non possono essere resi persistenti, un'attività può indicare a un host che non deve essere resa persistente usando l'oggetto NoPersistHandle. Un flusso di lavoro può rendere esplicitamente persistenti i propri dati in un supporto di archiviazione durevole tramite l'attività Persist.