Question

Comment résoudre ce problème (en WF4):

Je crée un flux de travail en XAML et commencer à plusieurs instances de celui-ci, j'ai un persistancestore et tous les flux de travail sur un signet persévère à mi-chemin de leur flux de travail.

J'arrête l'application

Si je te remets en marche tout application est repris, en bien battant.

Mais si je veux changer la définition du flux de travail après que les instances de fonctionnement persistent? la seule façon de charger les flux de travail en cours d'exécution (que j'ai pu trouver) est la manière suivante:

        WorkflowApplication wfapp = new WorkflowApplication(new WorkflowDefinition());
        wfapp.InstanceStore = new SqlWorkflowInstanceStore(connStr);

        wfapp.Load(wfGuid);

Vous avez donc besoin de la définition de flux de travail, si elle a changé au cours de la persistence, les choses tournent mal.

Quelle est la meilleure façon de résoudre ce problème?

Était-ce utile?

La solution

Ce scénario est un peu un problème. Il n'y a aucun moyen de migrer suis plus vieux définition de workflow au nouveau format. Je l'ai fait quelques tests limités et certains scénarios avec l'ajout / suppression des activités où pas encore l'exécution a bien fonctionné. Mais j'a aussi des scénarios tournent mal, y compris l'exécution d'une activité re déjà terminé.

En ce que je sache il n'y a pas de bonne façon de résoudre le problème autre que le suivi de la version du XAML / montage utilisé pour créer le flux de travail et vérifier que lorsque vous voulez redémarrer un flux de travail pour déterminer la version du flux de travail à utiliser .

Autres conseils

De nombreuses versions du même flux de travail doit coexister. Je veux dire, les anciennes instances doit finir avec l'ancienne version de workflow, et les nouvelles doit begining avec la nouvelle version de workflow. Dans mon cas, nous avons des services de flux de travail. Il est de la configuration où un routeur décrit l'ordre dans lequel les instances tentent d'exécuter. Si une instance ne peut pas commencer à travailler avec une version, la suivante est essayée, et ainsi de suite.

En outre, si votre changement ne comporte pas de changements dans les variables de flux de travail, les contrats exposés, etc ... anciennes et nouvelles versions d'instance de flux de travail peuvent fonctionner sur la même version de workflow. Vous saurez que, tester.

Il est pas tellement un problème avec Windows Workflow comme il est le service de persistance SQL. Vous pouvez créer votre propre service de persistance qui peut gérer cette situation, que ce soit en soutenant la conversion de l'ancien flux de travail dans le nouveau flux de travail ou quelque chose de plus abstrait, comme un service de persistance qui sérialise comme XML / JSON, quelque chose qui pourrait soutenir plus facilement désérialisation d'un la version comme une autre version.

Il est possible de charger persisté wf par exemple après avoir modifié la définition WF4 - vous devez analyser et modifier les fichiers XML que le moteur stocke wf. Vous devez créer deux flux de travail égaux: avec l'ancienne version et la nouvelle version et de les comparer afin d'éliminer les différences. Cela doit être fait pour le xml de définition et le xml de données complexes qui est utilisé pour stocker l'état de flux de travail. Avec LinqToXML Parsing vous permettra d'économiser beaucoup de temps et vous devez être sûr que vous avez vérifié toutes les différences - s'il y a une différence à gauche, le wf ne sera pas en mesure de charger. Il y a un élément « ResumeData », que vous pouvez trouver dans l'état wf xml, ce qui est trop lourd pour analyser, mais les bonnes nouvelles est que vous pouvez simplement le supprimer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top