Esempi di Windows Workflow Foundation

by Andrea 06 October 2009 08:34

TutorialsCercando di capire come creare il mio primo workflow di tipo State Machine, che cambi lo stato grazie ad eventi esterni, decido di cercare degli esempi per avere qualche indicazione, ed incappo in alcuni tutorial che sono del tutto incomprensibili.
Tutorial scaricabili direttamente da qui,
Create a State Machine Workflow.

Mi piacerebbe proprio capire chi è in grado di comprendere cosa è contenuto in quel file, visto che i nomi delle cartelle sono Tutorial1, Tutorial2, Tutorial3, Tutorial4 e Tutorial5, che a sua volta contengono delle cartelle Exercise1, Exercise2 e Exercise3, e che a loro volta contengono dei file zip chiamati Task1.zip, Task2.zip e Task3.zip.
Dopo un pò di soluzione aperte a casaccio (perchè nell'articolo non viene indicato il corrispondente tutorial/exrcise/task)  mi decido a chiudere tutto e a cercare di meglio.

Ecco infatti, che sempre dal sito di MSDN ho trovato questi esempi  scaricabili da questa pagina Ordering State Machine Sampleche invece sono veramente ben fatti, e completi.
Gli esempi non comprendono solo State Machine, ma sono esempi che coprono parecchie altre funzionalità di Workflow Foundation, WCF e CardSpace.
Davvero ottimi. ;-)

Tags:

.NET | Microsoft

Windows Workflow Foundation - abilitare il tracking

by Andrea 06 October 2009 05:44

Come per il servizio di persistenza (descritto nel precedente post), Windows Forkflow Foundation dispone di un provider di default anche per tracking, che si chiama SqlTrackingService.

Questo servizio si occupa di tenere traccia di tutti i cambiamenti che avvengono all'interno di un workflow, da quando viene instanziato a quando viene concluso, memorizzando anche tutte le informazioni che hanno portato ai vari cambiamenti di stato.
Per maggio info: Windows Workflow Tracking Services

Anche per questo provider è necessario predisporre il database per l'utilizzo. Si dovrà creare il database che dovrà contenere le informazioni (CREATE DATABASE WorkflowTrackingStore) e successivamente lanciare gli script
SqlTracking_Schema.sql e SqlTracking_Logic.sql
che si trovano in
C:\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\en.

Il codice di utilizzo è identico a simile a quello del servizio di persistenza. Ecco il codice, integrato all'esempio precedente:

   1: // Create the runtime and services objects.
   2: WorkflowRuntime runtime = new WorkflowRuntime();
   3: SqlWorkflowPersistenceService persistenceService = new SqlWorkflowPersistenceService("connectioString");
   4: SqlTrackingService trackingService = new SqlTrackingService("connectioString");
   5:  
   6: // Add the services and start the runtime.
   7: runtime.AddService(persistenceService);
   8: runtime.AddService(trackingService);
   9: runtime.StartRuntime();
  10:  
  11: // Stop the runtime and remove the services.
  12: runtime.StopRuntime();
  13: runtime.RemoveService(persistenceService);
  14: runtime.RemoveService(trackingService);

Per maggiori informazioni a riguardo di come preparare l'applicazione all'uso del servizio di tracking, ecco qui il link alla pagina su MSDN: Using

Nei prossimi post vedremo meglio in dettaglio l'utilizzo di questi servizi e la loro effettiva utilità.

Tags:

.NET | Microsoft

Windows Workflow Foundation - abilitare la persistenza

by Andrea 06 October 2009 05:10

In rete si trova parecchia documentazione riguardante Windows Workflow Foundation, ma spesso nei vari esempi o articoli non viene descritta una parte fondamentale, come nel caso della persistenza, ho dovuto sfogliare parecchi link prima di trovare il come creare il database per poter utilizzare il provider SqlWorkflowPersistenceService.

Questo provider è il provider che viene fornito di default per persistere un workflow in un database SQL Server. (E' comunque possibile creare un provider custom seguendo le indicazioni che trovate a questo link)
Mantenere un workflow solo in memoria ha parecchie limitazioni, e nel caso di operazioni lunghe, o crash/recycle del processo, questo potrebbe essere un problema non da poco. Ecco che il servizio di persistenza permette di ovviare a questi problemi, mantenendo persistente lo stato, e quindi permettendo il recupero del workflow.
Il runtine del workflow, nel caso abbia un sevizio di persisteza presente, si occupa di salvare in automatico (o volendo anche in modo manuale) il proprio stato, in particolari condizioni:

  • alla fine di una transazione atomica
  • sull'evento di Idle entrando in una Delay Activity
  • quando l'host chiama WorkflowInstance.Unload sull'istanza del flusso di lavoro
  • quando un'istanza del flusso di lavoro viene terminata o si conclude

Ovviamente è in grado di ripristinare il proprio stato in modo automatico, o volendo anche di forzarlo in manuale.

Prima di procedere a scrivere del codice si dovrà predisporre il database all'uso di questo servizio.
Sarà necessario quindi creare un database vuoto (CREATE DATABASE WorkflowPersistenceStore)
e poi lanciare gli script
SqlPersistenceService_Logic.sql e SqlPersistenceService_Schema.sql
che si trovano in
C:\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\en (ovviamente all'interno del database appena creato).

Nell'applicazione, una volta referenziati gli assembly di Windows Workflow Foundation, si potrà aggiungere il servizio da codice nel seguente modo:

   1: // Create the runtime and SqlWorkflowPersistenceService objects.
   2: WorkflowRuntime runtime = new WorkflowRuntime();
   3: SqlWorkflowPersistenceService persistenceService = new SqlWorkflowPersistenceService("connectioString");
   4:  
   5: // Add the SqlWorkflowPersistenceService and start the runtime.
   6: runtime.AddService(persistenceService);
   7: runtime.StartRuntime();
   8:  
   9: ...
  10: // Stop the runtime and remove the SqlWorkflowPersistenceService.
  11: runtime.StopRuntime();
  12: runtime.RemoveService(persistenceService);

Per maggiori informazioni a riguardo di come preparare l'applicazione all'uso del servizio di persistenza, ecco qui il link alla pagina su MSDN: Using SqlWorkflowPersistenceService

Tags:

.NET | Microsoft

Windows Workflow Foundation…da dove partire

by Andrea 06 October 2009 05:02

Dopo parecchio tempo dalla sua uscita, finalmente è capitata l'occasione di potermi studiare (e forse applicare) Windows Forkflow Foundation.

Per chi non lo conoscesse, si tratta di un framework e un engine che permettono di gestire dei processi secondo un preciso flusso. Esistono diverse tipologie di workflow che rispondono a differenti esigenze: nella versione attuale si ha la possibilità di scelta tra sequential workflow e state machine, ma quest'ultimo, nella prossima versione del framework, verrà sostituito dal flow chart).

Windows Workflow Foundation...
provides a programming model, in-process workflow engine and rehostable designer to implement long-running processes as workflows within .NET applications.

Per chi deve iniziare a studiarsi questa tecnologia, i punti di partenza sono i seguenti link:
MSDN Library: Windows Workflow Foundation
.NET Framework Developer Center: Windows Workflow Foundation

Suggerisco anche di scaricare le slide e il codice dell'evento che Raffaele Rialdi ha tenuto a XeDotNet, e che trovate a questo link:
Community Meeting: Workflow Foundation - 11 Maggio 2007

Un ulteriore consiglio a chi stà iniziando ora (come nel mio caso) a conoscere questa tecnlogia, è quello di documentarsi a riguardo delle novità/cambiamenti che verranno introdotti nella prossima versione del Framework, in modo da predisporre l'applicazione per eventuali cambiamenti/migliorie ed evitare quindi di buttare all'aria codice appena prodotto.
Upcoming Changes to .NET Framework 4: Windows Workflow Foundation (WF)

Tags:

.NET | Microsoft