2009-06-09 10 views
1

私は現在WFフレームワークを学んでいますので、私に同行してください。ほとんど私はを探しています。は、必ずしも直接的な答えではなく、見ることを開始します。私はちょうど私がGoogleで望んでいるものを研究し始める方法を理解しているようには思えない。Windowsワークフロー:永続性とポーリング

私はシンプルなワンステップワークフローを持っています(これよりもはるかに複雑ですが、簡単にするため)。このワークフローでは、データベース内の特定のレコードを監視して、変更のタイミングを確認する必要があります。私は行が変わったときにデータベースからトリガーを介して "プッシュ"する機能を持っていないので、頻繁にポーリングする必要があります。

このワークフローは、長時間実行されるワークフローであるため、再起動やその他のものに対して耐久性を持たせるためにデータベースに保存する必要があります。私はそれを3分ごとにチェックしてデータベースに保存する最良の方法を見つけようとしています。フレームワークの持続性機能はそれを可能にしますか?それは時間ベースのようだ。また、ワークフローは外部イベントによって再現されないため、データベースからどのようにリロードされ、以前と同じ手順を確認しますか?再読み込み時に最後に行われなかったアクティビティを自動的に試みますか?

遅延が設定された「while」アクティビティは、まったく動作するのですか、それとも永続性サービスのみで処理できますか?

答えて

1

"soley through persistence servicesを処理しました"とはどういう意味ですか?永続性とは、アイドル状態のワークフローの保存のみを指します。

Whileループのシーケンス内に、遅延アクティビティとコードアクティビティを持つことができます。遅延の場合、ワークフローはアイドル状態になり、必要に応じて保持されます。ただし、ワークフローを永続化するときに必要な状態の量や、同時に実行するワークフローの数によっては、よりリーンなアプローチが必要な場合があります。

DB視聴を外部化し、希望の変更が発生したときにワークフローサービスの一部が「DB監視」ワークフローを開始するようにする方がリーンなアプローチです。このサービスは、Workflowランタイムに追加されます。

あなたは、[ExternalDataExchange]属性を持つIntefaceによって定義されたサービス契約が必要です。このインターフェースは、所望のDB変更が検出されたときにサービスが呼び出すイベントを定義します。また、ワークフローが呼び出すことができるメソッドを定義して、このサービスがどのような変更を必要としているかを指定します。このメソッドは、DB変更が検出されたときに要求インスタンスが見つかるように、インスタンスGUIDを受け入れる必要があります。

ワークフローでは、このサービスメソッドを呼び出すためにCallExternalMethodActivityを使用します。その後、イベントを待機するHandleExternalEventActivityに流れます。この時点で、ワークフローはアイドル状態になり、永続化されます。サービスがイベントを起こすまではそこにとどまります。

+0

私はそのアプローチが本当に好きです。このフレームワークについて私が持っているいくつかのアーキテクチャ上の質問をクリアします。ありがとう! – Chris

関連する問題