Windows Workflow Foundation
In deze blog willen we één van de onderbelichte onderdelen van het .NET Framework eens in de kijker zetten: Windows Workflow Foundation.
Windows Workflow Foundation (WF) zit verweven in producten zoals BizTalk, SharePoint en MSBuild. Sinds .NET 4.0 maakt het deel uit van de System.Activities namespace en kan het via Visual Studio visueel ontworpen, ontwikkeld en gehost worden.
Werken met WF omvat verschillende onderdelen:
Workflows ontwerpen met:
- Activiteiten
- Flowcharts
- State machines
Taken uitvoeren bij het bereiken van bepaalde stappen in de workflow:
- Standaardactiviteiten
- Eigen activiteiten in C# of VB.NET
Workflows pauzeren met bookmarks om extra input te ontvangen
Workflow-instanties hosten in de runtime:
- Standaard transient hosting
- Standaard persistent hosting via WCF
- Eigen hosting in .NET voor maximale flexibiliteit
Het is duidelijk dat WF op veel manieren inzetbaar is. Zo wordt het gebruikt in MSBuild (een transient scenario) en in SharePoint (een persistent scenario). In BizTalk zie je zelfs een combinatie van beide.
Transient scenario (zoals MSBuild)
In dit type scenario zijn alle inputs bij de start gekend (bv. broncode en buildconfiguratie). De workflow draait kortstondig in het geheugen. Als er tijdens de uitvoering nog input nodig is, bestaat het risico dat de workflow al beëindigd is. Daarom is dit scenario enkel geschikt als alles vooraf vastligt.
Persistent scenario (zoals SharePoint)
Hierbij moet de workflow kunnen wachten op extra input, zoals goedkeuringen in een documentflow. De workflow moet dus kunnen pauzeren en later hervat worden, wat enkel mogelijk is met persistente opslag.
Belang van de juiste keuze
De keuze tussen transient en persistent heeft een grote impact. Niet alle opties zijn combineerbaar. Zo kan je bij een persistent scenario niet kiezen voor transient hosting. Standaard hostingopties leggen ook beperkingen op. Voor maximale controle en flexibiliteit is maatwerk hosting nodig.
Hosting implementeren
Bij eigen hosting moet je rekening houden met multithreading:
- Gebruik WaitHandle (zoals ManualResetEventSlim) om te wachten op host-events van andere threads.
- Voor features zoals persistentie werk je met Begin*/End*-methodes die een IAsyncState delen.
Eigen activiteiten bouwen
- Gebruik CodeActivity voor eenvoudige input/output.
- Gebruik NativeActivity voor complexere logica, zoals bookmarks of toegang tot de workflowcontext.
Tot slot teken je de workflow uit in een stijl die bij je toepassing past.
Hopelijk geeft deze blog je een beter beeld van Windows Workflow Foundation, een krachtig maar vaak onderbelicht onderdeel van het .NET Framework. Veel succes met het ontdekken en toepassen ervan!