IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Workflow Foundation .NET Discussion :

Relance d'un WorkFlow Runtime


Sujet :

Windows Workflow Foundation .NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Points : 198
    Points
    198
    Par défaut Relance d'un WorkFlow Runtime
    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:

    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);
    Voici la méthode Start_Workflow:
    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);
                }
            }
    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.
    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
    Une légende amérindienne raconte qu'il y eut un immense incendie de forêt. Tous les animaux terrifiés et atterrés observaient, impuissants, le désastre. Seul, un colibri s'activait et allait chercher quelques gouttes d'eau dans son bec pour éteindre le feu.
    Au bout d'un moment, le tatou, agacé par ses agissements dérisoires, lui dit :
    'Colibri ! N'es-tu pas fou ? Tu crois que c'est avec ces gouttes d'eau que tu vas éteindre le feu ?
    'Je le sais, répond le colibri, mais je fais ma part...

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    J'ai regardé un peu ton code, pour le comparer au mien, et la ligne qui revient chez toi, et non chez moi, c'est :

    workflowRuntime.StartWorkflow();

    Moi, dans toutes les utilisations du WF, j'ai toujours procédé de la sorte :

    using avec la création du workflowRuntime
    ajout des services
    création d'une instance de workflow

    Sinon, pour ce qui est des sites ou tu pourrais trouver de bonnes explications sur le WF, j'en ai pas vraiment... par contre, je ne peux que te conseiller vivement "Essential Windows Workflow Foundation"

    Tout le Workflow Runtime y est bien expliqué. ( entre autres )

Discussions similaires

  1. Relancer un workflow persisté suspendu
    Par rose77 dans le forum Windows Workflow Foundation
    Réponses: 1
    Dernier message: 25/04/2015, 14h57
  2. Relancer workflow persisté à l'entrée d'un webserviceinputactivity
    Par Lackap dans le forum Windows Workflow Foundation
    Réponses: 0
    Dernier message: 22/07/2010, 15h20
  3. Impossible de trouver System.Workflow.Runtime.Messaging
    Par CUCARACHA dans le forum Windows Workflow Foundation
    Réponses: 3
    Dernier message: 11/03/2010, 17h19
  4. Relancer un workflow
    Par Vincent Dieudonné dans le forum SharePoint
    Réponses: 3
    Dernier message: 26/11/2009, 11h32
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo