Salut à tous,
j'ai un problème dans le relancement d'un Workflow. Je m'explique.
Une application Window simple, lance un Workflow suite à un click sur un bouton. Ceci démarre un thread qui va lancer le Workflow:
Voici la méthode Start_Workflow:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Thread start_workflow = new Thread(new ParameterizedThreadStart(this.Start_Workflow)); start_workflow.Start(gp);
Des événements sont reçus par le Workflow pour orienter son process. Lors du premier lancement, je n'ai aucun problème, le workflow se termine correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 private void Start_Workflow(object gp) { try { SharingMethod.waitHandle = new AutoResetEvent(false); // Démarrage Workflow using (WorkflowRuntime workflowruntime = new WorkflowRuntime()) { // Ajoute l'objet gestion métier à l'environnement du workflow // Utile pour la gestion de l'événement ExternalDataExchangeService dataservice = new ExternalDataExchangeService(); workflowruntime.AddService(dataservice); dataservice.AddService(this); // Ajout l'objet métier Portique à l'environnement du workflow // Utile pour l'insertion des données. ExternalDataExchangeService service_gp = new ExternalDataExchangeService(); workflowruntime.AddService(service_gp); service_gp.AddService((GesPorti)gp); workflowruntime.StartRuntime(); // Sélection du workflow à lancer Type type = typeof(WF_Process); } WorkflowInstance instance = workflowruntime.CreateWorkflow(type); instance.Start(); Global.Instance_Id = instance.InstanceId; SharingMethod.waitHandle.WaitOne(); workflowruntime.StopRuntime(); } } catch (Exception ex) { MessageBox.Show("Message start workflow : " + ex.Message); } }
Par contre, quand je reclique sur le bouton, le workflow se lance bien, mais lors de l'arrivée d'un événement, j'ai une exception avec le message : Impossible de fournir l'événement Evt à un objet inexistant. Le InnerException Message : Impossible d'accèder à l'objet supprimé, Nom de l'objet WorkflowRuntime.
J'ai vérifié et le workflowruntime est bien créé, l'instance se fait bien et le workflow démarre bien. Par contre, pas moyen de recevoir des événements.
La variable Global.Instance_Id me permet d'envoyer l'événement à l'instance en cours. Le Guid est bon et correspond à l'instance.
Après plusieurs essais en déboggage, je n'ai guère avancé.
Voici le message de l'exception EventDeliveryFailedException
Impossible de fournir l'evt EVENT sur le type d'interface InterfaceGes associé à l'instance xxxx (instance en cours).
Supposition : l'interface est associé à la 1ére instance du Workflow et n'est pas libéré poux une raison encore inconnue.
Je continue, pour l'instant seul, mon problème. Apparemment, WorkFlowRuntime n'apprécie pas beaucoup le using. Je l'ai supprimé et on va dire que ça fonctionne plus ou moins bien.
Lorsque l'on libére la représentation de l'environnement, on libére complétement l'environnement. Du coup, impossible de recréer une nouvelle représentation (à n'y rien comprendre).
Aujourd'hui, j'ai de gros soucis pour comprendre le fonctionnement du WorkflowRuntime, comment il se crée, se termine.
Si des personnes ont des sites à me référencer sur le WorkflowRuntime autres que MSDN.
Merci
Partager