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

Comments

09/10/2009 05:44 #

Windows Workflow Foundation - abilitare il tracking

Windows Workflow Foundation - abilitare il tracking

Andrea Dottor - il silenzio di un urlo |

Comments are closed