Utilisation de workflows avec ASP.NET

Windows Workflow Foundation a été créé pour être exécuté dans des environnements d'application hôte divers. ASP.NET Web Forms fait partie des environnements pris en charge. Toutefois, lorsque vous créez une application d'hébergement basée sur le Web pour Windows Workflow Foundation, vous devez concevoir votre infrastructure d'hébergement en tenant compte des différences architecturales clés qui existent entre une application ASP.NET et une application Windows Form traditionnelle. Par exemple, les applications ASP.NET peuvent servir plusieurs utilisateurs synchrones simultanément. Dans un environnement de serveur de ce type, votre application doit être conçue de façon à utiliser efficacement la mémoire système disponible. Windows Workflow Foundation fournit le service SqlWorkflowPersistenceService permettant de décharger les instances de workflow. En outre, ASP.NET envoie une réponse lorsqu'il reçoit une demande. Par défaut, les workflows sont exécutés par le runtime de workflow de façon asynchrone. À cause de cela, une page peut être restituée et une réponse peut être envoyée avant la fin d'un workflow. Pour y remédier, Windows Workflow Foundation fournit le service ManualWorkflowSchedulerService pour garantir l'exécution synchrone des workflows. Cela permet à votre formulaire Web de renvoyer à l'utilisateur des informations sur l'état du workflow.

Création de l'objet WorkflowRuntime

Le fichier Global.asax contenu dans ASP.NET peut être utilisé pour gérer des événements de formulaire Web relatifs aux sessions ou événements Web individuels déclenchés lorsque votre application Web commence ou se termine. L'objet Session contenu dans ASP.NET est créé pour chaque utilisateur qui demande une page Web et l'objet Application est un objet unique partagé dans chaque session. L'exemple de code suivant montre comment vous pouvez gérer l'événement Application_Start pour créer une instance WorkflowRuntime et ajouter le ManualWorkflowSchedulerService. Une fois cette opération effectuée et le runtime exécuté à l'aide de la méthode StartRuntime, vous pouvez enregistrer l'instance WorkflowRuntime dans l'objet Application fourni avec ASP.NET. Dans les demandes de pages Web de votre application, vous pouvez récupérer cette instance WorkflowRuntime pour démarrer un workflow.

void Application_Start(object sender, EventArgs e) 
{
    System.Workflow.Runtime.WorkflowRuntime workflowRuntime =
        new System.Workflow.Runtime.WorkflowRuntime();

    System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService manualService =
        new System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService();
    workflowRuntime.AddService(manualService);
    
    workflowRuntime.StartRuntime();

    Application["WorkflowRuntime"] = workflowRuntime;           
}

ASP.NET déclenche l'événement Application_End lorsque l'application s'arrête. Le code suivant indique comment récupérer l'objet WorkflowRuntime créé au cours de l'événement Application_Start pour appeler la méthode StopRuntime.

void Application_End(object sender, EventArgs e) 
{
    System.Workflow.Runtime.WorkflowRuntime workflowRuntime =
        Application["WorkflowRuntime"] as System.Workflow.Runtime.WorkflowRuntime;
    workflowRuntime.StopRuntime();
}

Démarrage des workflows dans les formulaires Web ASP.NET

Dans la section précédente, une instance WorkflowRuntime a été créée pendant l'événement Application_Start. Cet objet est conservé tant que l'application Web gère des demandes. Le code suivant indique comment récupérer l'instance WorkflowRuntime à partir de l'objet Application dans ASP.NET. Une fois terminé, utilisez la méthode GetService pour récupérer le ManualWorkflowSchedulerService utilisé pour démarrer l'exécution synchrone d'un workflow. Pour cela, appelez la méthode CreateWorkflow définie dans la classe WorkflowRuntime suivie de la méthode Start de l'objet WorkflowInstance retourné par l'appel CreateWorkflow. Puisque le ManualWorkflowSchedulerService a été ajouté au WorkflowRuntime, appelez la méthode RunWorkflow, en passant l'InstanceId de l'objet WorkflowInstance.

protected void StartRuntime_Click(object sender, EventArgs e)
{
    WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;
    ManualWorkflowSchedulerService manualScheduler = 
        workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) 
        as ManualWorkflowSchedulerService;

    WorkflowInstance instance = workflowRuntime.CreateWorkflow(
        typeof(ASPNetSequentialWorkflow));
    instance.Start();
    manualScheduler.RunWorkflow(instance.InstanceId);
}

Voir aussi

Référence

WorkflowRuntime
ManualWorkflowSchedulerService
GetService
RunWorkflow
WorkflowInstance
StartRuntime

Concepts

Comment : ajouter et supprimer des services de workflow

Autres ressources

Développement d'applications de workflow ASP.NET

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.