0

Ich versuche, die .NET Workflow Foundation etwas besser zu verstehen, vor allem, wie die Persistenz/Entlade- und Fortsetzungsfunktion funktioniert.Warum wird der Workflow nach dem Entladen nicht aktiviert?

Also für Testzwecke habe ich eine sehr einfache Aktivität erstellt und versucht, sie in einem WorkflowApplication zu hosten. Ich würde gerne lernen, wie man die Workflow-Instanzen persistent macht, wenn sie im Leerlauf sind. Also schrieb ich den folgenden Code:

var store = new SqlWorkflowInstanceStore("......"); 
var identity = new WorkflowIdentity("MyAwesomeWorkflow", Version.Parse("1.0"), String.Empty); 
var activity = new Sequence() 
{ 
    Activities = 
    { 
     new WriteLine() {Text = "hello"}, 
     new Delay() {Duration = TimeSpan.FromSeconds(5)}, 
     new WriteLine() {Text = "bye"}, 
    } 
}; 
var wfapp = new WorkflowApplication(activity, identity); 
var resetEvent = new ManualResetEventSlim(); 
wfapp.InstanceStore = store; 
wfapp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) 
{ 
    Console.WriteLine("Persistable idle"); 
    return PersistableIdleAction.Unload; 
}; 
wfapp.Completed += delegate(WorkflowApplicationCompletedEventArgs eventArgs) 
{ 
    Console.WriteLine("completed"); 
    resetEvent.Set(); 
}; 

wfapp.Run(); 
resetEvent.Wait(); 

Der Workflow entladen wird, wenn die Delay Aktivität beginnt, wird aber nicht wieder aufgenommen, wenn die Delay vorbei ist. Ich bin kein Workflow-Foundation-Experte, daher merke ich, dass ich die API falsch verwenden muss. Nach meinen Kollegen sollte der Workflow automatisch aufwachen und die Ausführung fortsetzen, wenn die Delay beendet ist.

Ich habe this MSDN article zu dem Thema gelesen, aber es scheint nicht diesen Aspekt sehr gut zu erklären.

+0

Workflow (im Gegensatz zu Service-Host) wird nicht entladene Workflows für Sie fortsetzen - Sie müssen es manuell tun. – Evk

+0

@Evk Können Sie ein bisschen mehr ausarbeiten? – Venemo

+1

Nun, ich bin mir nicht sicher, ob ich mehr erzählen kann. Wenn Sie WorkflowServiceHost verwenden, kann es unausgelastete Arbeitsabläufe für Sie fortsetzen. WorkflowApplication kann nicht, also funktioniert dein Beispiel wie vorgesehen, da ist nichts falsch an deiner Seite. – Evk

Antwort

2

In der Zwischenzeit habe ich es herausgefunden. Da niemand eine Antwort gepostet hat, werde ich es hier nur posten, falls jemand nach einer Lösung sucht.

Grundsätzlich unterstützt die Workflow Engine die automatische Wiederaufnahme von Workflowinstanzen nicht. Es ist etwas irreführend, aber WorkflowApplication unterstützt dies nicht.

So konnte man:

  • manuell die Instanz Speicher-Datenbank abfragen und die Workflow-Instanzen wieder aufnehmen, wenn entsprechenden
  • Verwenden WorkflowServiceHost, die die gleiche Abfrage unter der Haube implementiert
Verwandte Themen