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.
Lo sviluppo di flussi di lavoro in .NET Framework 4.6.1 usa concetti che potrebbero essere nuovi per alcuni sviluppatori. In questo argomento vengono descritti alcuni concetti e come vengono implementati.
Flussi di lavoro e attività
Un flusso di lavoro è una raccolta strutturata di azioni che modellano un processo. Ogni azione nel flusso di lavoro viene modellata come attività. Un host interagisce con un flusso di lavoro usando WorkflowInvoker per richiamare un flusso di lavoro come se fosse un metodo, WorkflowApplication per il controllo esplicito sull'esecuzione di una singola istanza del flusso di lavoro e WorkflowServiceHost per le interazioni basate su messaggi in scenari a istanze multipla. Poiché i passaggi del flusso di lavoro sono definiti come una gerarchia di attività, l'attività più in alto nella gerarchia può essere definita per definire il flusso di lavoro stesso. Questo modello di gerarchia ha il posto delle classi esplicite SequentialWorkflow e StateMachineWorkflow delle versioni precedenti. Le attività stesse vengono sviluppate come raccolte di altre attività (usando la Activity classe come base, in genere definite tramite XAML) o vengono create usando la CodeActivity classe , che può usare il runtime per l'accesso ai dati o usando la NativeActivity classe , che espone l'ampiezza del runtime del flusso di lavoro all'autore dell'attività. Le attività sviluppate tramite CodeActivity e NativeActivity vengono create usando linguaggi conformi a CLR, ad esempio C#.
Modello di dati delle attività
Le attività archiviano e condividono i dati usando i tipi illustrati nella tabella seguente.
| TIPO | Descrizione |
|---|---|
| Variabile | Archivia i dati in un'attività. |
| Argomentazione | Sposta i dati dentro e fuori da un'attività. |
| Espressione | Un'attività con un valore di ritorno elevato utilizzata negli accoppiamenti di argomenti. |
Runtime del flusso di lavoro
Il runtime del flusso di lavoro è l'ambiente in cui vengono eseguiti i flussi di lavoro. WorkflowInvoker è il modo più semplice per eseguire un flusso di lavoro. L'host usa WorkflowInvoker per quanto segue:
Per richiamare in modo sincrono un flusso di lavoro.
Per fornire input o recuperare l'output da un flusso di lavoro.
Per aggiungere estensioni da usare per le attività.
ActivityInstance è il proxy thread-safe che gli host possono usare per interagire con il runtime. L'host usa ActivityInstance per quanto segue:
Per acquisire un'istanza creandola o caricandola da un archivio di istanze.
Per ricevere una notifica degli eventi del ciclo di vita dell'istanza.
Per controllare l'esecuzione del flusso di lavoro.
Per fornire input o recuperare l'output da un flusso di lavoro.
Per segnalare una continuazione del flusso di lavoro e passare i valori nel flusso di lavoro.
Per rendere persistenti i dati del flusso di lavoro.
Per aggiungere estensioni da usare per le attività.
Le attività ottengono l'accesso all'ambiente di runtime del flusso di lavoro usando la classe derivata appropriata ActivityContext , ad esempio NativeActivityContext o CodeActivityContext. Vengono usati per risolvere argomenti e variabili, per pianificare le attività figlio e per molti altri scopi.
Servizi
I flussi di lavoro offrono un modo naturale per implementare e accedere a servizi ad accoppiamento libero, usando le attività di messaggistica. Le attività di messaggistica sono basate su WCF e sono il meccanismo principale usato per ottenere dati da e verso un flusso di lavoro. È possibile comporre le attività di messaggistica insieme per modellare qualsiasi tipo di modello di scambio di messaggi desiderato. Per altre informazioni, vedere Attività di messaggistica. I servizi del flusso di lavoro vengono ospitati usando la WorkflowServiceHost classe . Per ulteriori informazioni, vedere Panoramica dei servizi flusso di lavoro di hosting. Per altre informazioni sui servizi flusso di lavoro, vedere Servizi flusso di lavoro
Persistenza, scaricamento e flussi di lavoro Long-Running
Flusso di lavoro di Windows semplifica la creazione di programmi reattivi a esecuzione prolungata fornendo:
Attività che accedono all'input esterno.
Possibilità di creare oggetti Bookmark che un listener host può riprendere.
Possibilità di rendere persistenti i dati di un flusso di lavoro e scaricare il flusso di lavoro, quindi ricaricare e riattivare il flusso di lavoro in risposta alla ripresa di Bookmark oggetti in un determinato flusso di lavoro.
Un flusso di lavoro esegue continuamente le attività fino a quando non sono presenti altre attività da eseguire o fino a quando tutte le attività attualmente in esecuzione sono in attesa di input. In questo ultimo stato, il flusso di lavoro è inattivo. È comune per un host scaricare flussi di lavoro inattive e ricaricarli per continuare l'esecuzione all'arrivo di un messaggio. WorkflowServiceHost offre funzionalità per questa caratteristica e fornisce una politica di scaricamento estendibile. Per i blocchi di esecuzione che usano dati di stato volatili o altri dati che non possono essere salvati in modo permanente, un'attività può indicare a un host che non deve essere salvata in modo permanente tramite .NoPersistHandle Un flusso di lavoro può anche rendere persistenti in modo esplicito i dati in un supporto di archiviazione durevole usando l'attività Persist .