Architecture Windows Workflow
Cette rubrique s'applique à Windows Workflow Foundation 4.
Windows Workflow Foundation (WF) élève le niveau d'abstraction pour le développement d'applications interactives à durée d'exécution longue. Les unités de travail sont encapsulées comme activités. Les activités s'exécutent dans un environnement qui fournit les fonctions suivantes : contrôle de flux, gestion des exceptions, propagation d'erreur, persistance des données d'état, chargement et déchargement de flux de travail en cours depuis la mémoire, suivi et flux de transaction.
Architecture des activités
Les activités sont développées comme types CLR qui dérivent soit des objets Activity, CodeActivity ou NativeActivity, soit de leurs variantes Activity, CodeActivity ou NativeActivity qui retournent une valeur. En développant des activités qui dérivent de l'objet Activity, l'utilisateur peut assembler des objets WorkflowElement préexistants pour créer rapidement des unités de travail qui s'exécutent dans l'environnement de workflow. L'objet CodeActivity permet quant à lui de créer la logique d'exécution en code managé, en utilisant l'objet CodeActivityContext principalement pour accéder aux arguments d'activité. En développant des activités qui dérivent de l'objet NativeActivity, les utilisateurs peuvent accéder au runtime via l'objet ActivityExecutionContext pour des fonctionnalités telles que la planification d'activités enfants, la création de signets, l'appel de travail asynchrone, l'enregistrement de transactions, etc.
La création d'activités qui dérivent de l'objet Activity est déclarative et ces activités peuvent être créées en XAML. Dans l'exemple suivant, une activité appelée Prompt
est créée à l'aide d'autres activités pour le corps d'exécution.
<Activity x:Class='Prompt'
xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml'
xmlns:z='https://schemas.microsoft.com/netfx/2008/xaml/schema'
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns="https://schemas.microsoft.com/2009/workflow">
<z:SchemaType.Members>
<z:SchemaType.SchemaProperty Name='Text' Type=' InArgument(s:String)' />
<z:SchemaType.SchemaProperty Name='Response' Type='OutArgument(s:String)' />
</z:SchemaType.Members>
<Sequence>
<my:WriteLine Text='[Text]' />
<my:ReadLine Bookmark='r1' Result='[Response]' />
</Sequence>
</Activity>
Contexte d'exécution des activités
ActivityExecutionContext est l'interface de l'auteur d'activité avec l'exécution du workflow. Elle permet d'accéder aux nombreuses fonctionnalités du runtime. L'exemple suivant consiste à définir une activité qui utilise le contexte d'exécution pour créer un signet (mécanisme qui permet à une activité d'enregistrer un point de continuation dans son exécution qui peut être reprise par un hôte passant des données dans l'activité).
public class SimpleReadLine : WorkflowElement
{
protected override void Execute(ActivityExecutionContext context)
{
context.CreateBookmark(this. DisplayName,
new ActivityExecutionCallback(OnReadComplete));
}
void OnReadComplete(ActivityExecutionContext context, object state)
{
string dataRead = (string)state;
Console.WriteLine("You entered: {0}", dataRead);
}
}
Cycle de vie des activités
À l'origine, l'instance d'une activité est à l'état Exécution. À moins que des exceptions ne soient rencontrées, elle conserve cet état jusqu'à ce que l'exécution de toutes les activités enfants, ainsi que tout autre travail en attente (objets Bookmark, par exemple) soient terminés, auquel cas elle passe à l'état Fermé. Le parent d'une instance d'activité peut demander qu'un enfant soit annulé. Si l'enfant est en mesure d'être annulé, il se termine et passe à l'état Annulé. Si une exception est levée lors de l'exécution, le runtime passe l'objet WorkflowElement à l'état d'erreur et propage l'exception en haut de la chaîne parente d'activités. Voici les trois états d'achèvement d'une activité :
Fermé : l'activité a terminé son travail et s'est arrêtée.
Annulé : l'activité a abandonné normalement son travail et s'est arrêtée. Le travail n'est pas restauré explicitement lorsque cet état est entré.
Faulted : l'activité a rencontré une erreur et s'est arrêtée sans terminer son travail.
Les activités restent à l'état Exécution lorsqu'elles sont rendues persistantes ou sont déchargées.