Accueil Rechercher Faq Enregistrement Connexion  
C#
gestion de la persistance des workflows : réhydratation

Thread Starter: drjacky   Started: 02-12-2009 11:00    Replies: 0
 Dotnet-Project.com & Dotnet-News.com Forums » .NET en général » C# » gestion de la persistance des workflows : réhydratation
 Printable Version    « Précédent Suivant »
  12 févr. 2009, 11:00
drjacky n'est pas en ligne. Dernière activité: 12/02/2009 11:48:51 drjacky

Top 10 Posts
Rejoint: 05-26-2008
Messages : 4
 gestion de la persistance des workflows : réhydratation
Bonjour à tous,

Je développe actuellement un workflow permettant de gérer le cycle de vie de documents (C#, VS2008).
Ceux-ci peuvent prendre différents statuts (draft, submitted, validated/rejected).

Tout fonctionne correctement, hormis la persistance, et tout particulièrement le processus de "réhydratation".

Je vais droit au but :
- au delà de 2-3 instances de worflows, lorsque je lance l'appli, je reçois l'exception :
**********************************************************************
An unhandled exception of type 'System.Workflow.Runtime.WorkflowOwnershipException' occurred in System.Workflow.Runtime.dll

Additional information: This workflow is not owned by the WorkflowRuntime. The WorkflowRuntime's ownership has expired, or another WorkflowRuntime owns the workflow.
**********************************************************************
effectivement, dans la table instanceState, il y a plusieurs ownerId. Comment gérer ce problème d'appartenance, sachant que l'appli devra, à terme, pouvoir être utilisée depuis plusieurs postes simultanément ?

- assez fréquemment, les workflows terminés ("completed") ne sont pas supprimés de la table instanceState, alors que la condition finale est vérifiée (WhileActivity --> IsValidated==false)
d'autre part, le status de ces mêmes WFs reste à 0 ("running") dans instanceState.

Voici le code utile :

lstWIs = new List<Guid>();// Persistance management :// déchargement en cas de pause du WF (UnloadOnIdle), déchargement sur la BD toutes les 30"SqlWorkflowPersistenceService dbService = new SqlWorkflowPersistenceService(ConfigurationManager.ConnectionStrings["WFStateCS"].ToString(), true, TimeSpan.MaxValue, new TimeSpan(0, 0, 30));// Création du runtimewfRuntime = new WorkflowRuntime();wfRuntime.AddService(dbService);// Continuation des WFs existants (persistés)IEnumerable<SqlPersistenceWorkflowInstanceDescription> instances = dbService.GetAllWorkflows();foreach (SqlPersistenceWorkflowInstanceDescription insDesc in instances){      wiPersisted = wfRuntime.GetWorkflow(insDesc.WorkflowInstanceId);      lstWIs.Add(insDesc.WorkflowInstanceId);      tmpGuid = Record.RecordDAO.GetInstance().GetRecId(wiPersisted.InstanceId);      if (tmpGuid != Guid.Empty)      // Ce workflow est actif (utilisé par un enregistrement) et doit être relancé     {           wiPersisted.Load(); // (re)chargement du WF     }}
 


Notez que, malgré le UnloadOnIdle = true, je décharge quand même manuellement tous les WFs actifs (présents dans la liste "lstWIs") sur l'event form_closed.

Merci d'éclairer ma lanterne (un petit sample éventuellement serait le bienvenue...) !

Etienne

Adresse IP: Connecté  
 Page 1 sur 1 [1 au total]
Dotnet-Project.com & Dotnet-News.com Forums » .NET en général » C# » gestion de la persistance des workflows : réhydratation

Vous pouvez ajouter une pièce jointe à un message dans ce forum
Vous pouvez écrire un nouveau sujet dans ce forum
Vous pouvez répondre à un sujet dans ce forum
Vous pouvez effacer un sujet dans ce forum
Vous pouvez éditer un message dans ce forum
Vous pouvez créer un sondage dans ce forum
Vous pouvez voter dans ce forum
Statistiques des messages sont activé pour ce forum
Forum est démodéré

Powered by Community Server :: Forums