0

私は、.NET Workflow Foundationをより良く理解しようとしています。特に、persist/unloadとresume機能がどのように機能するかを理解しています。アンロード後にワークフローが起動しないのはなぜですか?

私は非常に単純なアクティビティを作成し、それをWorkflowApplicationでホストしようとしました。私は、アイドル時にワークフローインスタンスを永続化する機能を使用する方法を学びたいと思います。

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(); 

Delay活動を開始したときにワークフローがアンロードされますが、Delayが終わったとき、それが再開されていません。だから私は、次のコードを書きました。私はWorkflow Foundationの専門家ではないので、私は間違ってAPIを使用しなければならないことを認識しています。私の同僚によると、Delayが終了すると、ワークフローは自動的に起き上がり、実行を再開するはずです。

私はこのトピックについてthis MSDN articleを読んだことがありますが、この面を非常にうまく説明していないようです。

+0

WorkflowApplicationの下で同じポーリングを実装

  • 使用WorkflowServiceHost適切なワークフローインスタンスを再開します)はアンロードされたワークフローを再開しません。手動で行う必要があります。 – Evk

  • +0

    @エヴァークもう少し詳しく説明できますか? – Venemo

    +1

    よく分かりません。 WorkflowServiceHostを使用すると、アンロードされたワークフローを再開できます。 WorkflowApplicationはできません。したがって、あなたのサンプルは意図どおりに動作します。 – Evk

    答えて

    2

    私はそれを理解しました。誰も回答を投稿していないので、誰かが解決策を探している場合に備えて、ここに投稿します。

    基本的に、ワークフローエンジンはワークフローインスタンスの自動再開をサポートしていません。誤解を招くことがありますが、WorkflowApplicationはこれをサポートしていません。

    だから、可能性:

    • は、手動でインスタンス・ストア・データベースをポーリングし、サービスホストとは異なり(フード
    関連する問題