複雑なワークフローで使用される一連のカスタム アクティビティがあります。
ワークフローをアイドル状態にすることなく、それら (カスタム アクティビティ) を永続化できるようにしたいと考えています。これは一種のフェイルオーバー システムである必要があるため、ワークフローの実行中に何か問題が発生すると、次のいずれかになります。
- ユーザーによって (いつでも) 一時停止され、後で一時停止されたブックマーク/ポイントから再開された (たとえば、ユーザーが外部システムがダウンしていることに気づき、ワークフローを一時停止したい場合など)。
- 未処理の例外が発生した場合は、最後のブックマーク/時点から実行を再開できます
- WorkflowApplication ホストの停止はいつでも発生する可能性があり、最後のブックマーク/時点から実行を再開できます
ワークフローの永続化で数日間作業しましたが、それで目標を達成できるかどうかはわかりません。なんで?
- 各カスタム アクティビティでブロック ブックマークを使用することもできますが、ワークフローをブロックして、ワークフローを永続化するためだけに再起動するのは、うまくいきそうにありません。
- notblocking ブックマークを使用することはできましたが、それらをデータベースで確認して再開することはできませんでした。
アドバイスをお願いできますか?ワークフロー ブックマークはここに行く方法ですか?
ブックマークをブロックしないことにはいくらかの光が見えますが、ブックマークを永続化して後で再開することはできません。後で再開するためにノンブロッキング ブックマークを保持する方法を教えてください。
編集:
wf3 には、PersistOnClose
私の要件に十分な属性がありました。wf4 ではアクティビティに置き換えられましたがPersist
、これも役立つ可能性がありますが、すでに複雑なワークフローに余分なアクティビティを追加したくありません。
context.RequestPersist(callback)
から実行できることが理想的ですが、NativeActivityContext
このメソッドは内部的なものです (そして、その内部にあるものはすべて、元のアセンブリの外部には表示されません。