2007-02-09

Persistence & Tracking

I ett tidigare inlägg pratade vi om hur vi kommer igång med Workflow foundation, nu skall vi prata om persistens och spårbarhet.

Workflow-runtimen har en metod som heter AddService och med denna kan vi lägga till tjänster av olika typer (även egna). Vi kommer nu att titta närmare på WorkflowPersistenceService och TrackingService.

WorkflowPersistenceService
Denna tjänst serialiserar (hydrerar) vår workflowinstans ned till valfritt media (tex sql-server) och tittar sedan på det då och då (konfigurerbart) för att avgöra om det är värt att plocka upp i minnet (dehydrera) för att köra vidare.
En hydrering sker så fort workflowinstansen är idle, exempelvis när den väntar på ett externt event eller om det finns en delay-aktivitet.

TrackingService
Denna tjänst ger oss spårbarhet och vi får även möjlighet att hämta upp kopior av hur flödet såg ut vid vissa tidpunkter. Tracking är avancerat (och användbart) och det finns massor av bra artiklar som beskriver ämnet närmare.

Tracking Services Introduction

Tracking Services Deep Dive

Out-of-the-box finns det två implementationer av ovanstående som arbetar mot Sql-server som enkelt visar hur vi kan komma igång.

private readonly static WorkflowRuntime workflowRuntime;

private readonly static SqlWorkflowPersistenceService persistenceService;

private readonly static SqlTrackingService trackingService;

Vi har sedan tidigare sett hur vi initierar runtimen så det hoppar vi över här.

//Initialize persistence

string persistenceSQLConnectString = ConfigurationManager.ConnectionStrings["PersistanceConnectionString"].ConnectionString;           

bool unloadOnIdle = true;

TimeSpan instanceOwnershipDuration = new TimeSpan(0,0,60);

TimeSpan loadingInterval = new TimeSpan(0, 2, 0);

persistenceService = new SqlWorkflowPersistenceService(persistenceSQLConnectString, unloadOnIdle, instanceOwnershipDuration, loadingInterval);           

workflowRuntime.AddService(persistenceService);

Detta är allt som krävs för att initiera persistance-tjänsten, låt oss nu titta på tracking

//Initialize tracking

string trackingSQLConnectString = ConfigurationManager.ConnectionStrings["TrackingConnectionString"].ConnectionString;

trackingService = new SqlTrackingService(trackingSQLConnectString);

workflowRuntime.AddService(trackingService);

För att få allt att lira krävs naturligtvis sql-server samt att de två databaserna är installerade. Script för detta fick ni "på köpet" med .NET 3.0 i katalogen

%windir%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN

2 kommentarer:

Tobias Strandh sa...

Intressant skrivet och kul med dina länkar som också ger "lite mer"

Daniel sa...

Kul att du gillar formatet och tack för din kommentar (första beviset på att någon verkligen läser bloggen =] )