oo7jb5
Messages postés45Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mars 2010
-
12 févr. 2009 à 11:06
samsoumitta
Messages postés23Date d'inscriptionmardi 21 avril 2009StatutMembreDernière intervention 9 juin 2010
-
18 mai 2010 à 00:36
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 runtime
wfRuntime = new WorkflowRuntime();
wfRuntime.AddService(dbService);
// 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...) !
samsoumitta
Messages postés23Date d'inscriptionmardi 21 avril 2009StatutMembreDernière intervention 9 juin 2010 18 mai 2010 à 00:36
Bonjour,
je suis entrain de développer une application de GED, donc pour gérer le cycle de vie du document je doit développer un workflow mais j'ai rencontrer pas mal de problème car c'est la 1ère application que je développe en ASP.Net C# et je suis très pressée par le temps.
SVP -si ça ne vous dérange pas- m'envoyez le code source du workflow qui permet de gérer le cycle de vie du document à cette adresse : samsoumitta@live.fr