2011年4月26日火曜日

永続化における Persist と Unload の違い

以前の記事で永続化する際には WorkflowApplication.PersistableIdle イベントで None 以外を返却するようにコーディングする必要がある事を書きました。None 外に指定できるのは、Persist と Uload の二つがありますが、この二つはその後の挙動に大きな違いが現れます。

Persist を指定した場合は永続化ストアに永続化されますが、ワークフローのインスタンスはそのまま残ります。Unload を指定した場合は、永続化されなおかつワークフローのインスタンスもアンロードされます。そのため単純に Unload を行った場合、一時停止状態で保存されているような扱いとなりワークフロー自体の実行も一時停止されます。Persist の場合は動作は継続されます。

Unload にてインスタンスごとアンロードしたワークフローを再開するには、WorkflowApplication.Load メソッドを用いて永続化ストアより読み込む必要があるのと、永続化時にブックマークを作成しておく必要があります。また再度読み込む際にワークフロー固有の ID 値( GUID )が必要ですので、実行時のワークフローの ID を WorkflowApplication.Id プロパティより保持しておく必要があります。

ワークフロー再開時のロジックは次のような形になります。

1: 'ワークフローの実行
2: _wfApps.Run()
3: _executionWorkflowId = _wfApps.Id 'ID の保存
4: '※実行するワークフローのアクティビティにてブックマークを作成しておく
5: 
6: 'ワークフローの再読込
7: _wfApps.Load(_executionWorkflowId)
8: 'ブックマークから再開
9: _wrApps.ResumeBookmark([ブックマーク],[アクティビティに渡す値])

このようなロジックにする事で、永続化に Unload を指定した場合の処理を再開する事が出来ます。ただし実際に利用する場合は、何かしらのアクションを受けて初めてワークフローを再開する事になると思いますが、その部分は自前で用意する必要があります。

0 件のコメント:

コメントを投稿