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.
Workflow (im Gegensatz zu Service-Host) wird nicht entladene Workflows für Sie fortsetzen - Sie müssen es manuell tun. – Evk
@Evk Können Sie ein bisschen mehr ausarbeiten? – Venemo
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