Lädt den persistenten Workflow, nachdem sich die Workflowdefinition in WF4 geändert hat

8

Wie man dieses Problem löst (in WF4):

Ich erstelle einen Workflow in xaml und starte mehrere Instanzen davon, ich habe einen persistystore und alle Workflows bleiben auf einem Lesezeichen in der Mitte ihres Workflows.

Jetzt stoppe ich die Anwendung

Wenn ich die Anwendung neu starte, wird alles wieder aufgenommen und schön abgeschlossen.

Aber was, wenn ich die Workflow-Definition ändern möchte, nachdem die laufenden Instanzen bestehen geblieben sind? Die einzige Möglichkeit, die laufenden Workflows (die ich finden konnte) zu laden, ist folgender:

%Vor%

Sie brauchen also die Workflow-Definition, wenn sie sich während der Dauer geändert hat, gehen die Dinge schrecklich schief.

Was ist der beste Weg, dies zu lösen?

    
Flores 14.01.2010, 13:59
quelle

5 Antworten

3

Dieses Szenario ist ein kleines Problem. Es gibt keine Möglichkeit, eine ältere Workflow-Definition in das neue Format zu migrieren. Ich habe einige begrenzte Tests durchgeführt und einige Szenarien mit Hinzufügen / Löschen von Aktivitäten, die noch nicht ausgeführt wurden, funktionierten gut. Aber dann habe ich auch Szenarien schief gelaufen, unter anderem die erneute Ausführung einer bereits abgeschlossenen Aktivität.

Soweit ich weiß, gibt es keinen anderen Weg, das Problem zu lösen, als die Version der XAML / Assembly zu verfolgen, die zum Erstellen des Workflows verwendet wurde, und zu überprüfen, wann Sie einen Workflow neu starten möchten, um die zu verwendende Workflowversion zu bestimmen .

    
Maurice 15.01.2010, 12:25
quelle
2

Vielleicht hilft es

Ссылка

    
Badri 07.04.2010 09:51
quelle
2

Viele Versionen desselben Workflows müssen koexistieren. Ich meine, die alten Instanzen müssen mit der alten Workflow-Version enden, und die neuen müssen mit einer neuen Workflow-Version beginnen. In meinem Fall haben wir Workflow-Services. Es ist in der Konfiguration, wo ein Router die Reihenfolge beschreibt, in der Instanzen versuchen, ausgeführt zu werden. Wenn eine Instanz nicht mit einer Version arbeiten kann, wird die nächste versucht und so weiter.

Wenn Ihre Änderung keine Änderungen in Workflowvariablen, Verträgen usw. enthält, können alte und neue Workflowinstanzversionen in derselben Workflowversion ausgeführt werden. Sie werden das wissen und es testen.

    
javi 04.04.2011 07:53
quelle
1

Es ist nicht so sehr ein Problem mit Windows Workflow als der SQL-Persistenzdienst. Sie könnten Ihren eigenen Persistenzdienst erstellen, der diese Situation entweder durch Unterstützung der Konvertierung des alten Arbeitsablaufs in den neuen Arbeitsablauf oder etwas Abstraktes wie einen Persistenzdienst, der als XML / JSON serialisiert, unterstützt, was die Deserialisierung eines Arbeitsablaufs leichter unterstützen könnte Version als eine andere Version.

    
Rich 26.01.2010 22:06
quelle
1

Nach dem Ändern der Definition in WF4 ist es möglich, die persistente WF-Instanz zu laden - Sie müssen die XML-Dateien analysieren und ändern, die die WF-Engine speichert. Sie sollten zwei gleiche Workflows erstellen: mit der alten Version und der neuen Version und um sie zu vergleichen, um die Unterschiede zu beseitigen. Dies muss für die XML-Definition und die XML-Datei für komplexe Daten erfolgen, die zum Speichern des Workflowstatus verwendet wird. Das Analysieren mit LinqToXML spart Ihnen viel Zeit und Sie müssen sicher sein, dass Sie alle Unterschiede überprüft haben - wenn es einen Unterschied gibt, kann die WF nicht laden. Es gibt ein Element "ResumeData", das Sie in der WF-Status XML finden können, die zu schwer ist, um zu analysieren, aber die gute Nachricht ist, dass Sie es einfach entfernen können.

    
user3177334 09.01.2014 11:35
quelle