2011年4月15日金曜日

Workflow の実行方法

作成した Workflow を実行する方法は3通り用意されています。それぞれに利用シーンがある程度明確にされているので、目的に応じて使い分ける必要があります。

  • WorkflowInvoker:最もシンプルにWorkflowを実行する
  • WorkflowApplication:イベントによる通知や永続化をサポートして実行する
  • WorkflowServiceHost:ワークフローサービスとして外部に公開する

他にも WorkflowInvoker は同一スレッドにて実行されるのと、WorkflowApplication は別スレッドで実行されるという違いはあります。

WorkflowApplication で提供されるイベント(っぽいもの)は次の通りです。

Aborted Action<T> ワークフロー インスタンスが中止されると呼び出される
Completed Action<T> ワークフロー インスタンスが完了すると呼び出される
Idle Action<T> 現在のワークフロー インスタンスがアイドル状態になると呼び出される
OnUnhandledException Func<T, TResult> 現在のワークフロー インスタンスが未処理の例外を検出すると呼び出される
PersistableIdle ActivityFunc 現在のワークフロー インスタンスがアイドル状態になり、永続化できるようになると呼び出される
Unloaded Action<T> 現在のワークフローがアンロードされると呼び出される

これらはイベントとしてではなくプロパティを通して提供されていますので、VB ですので Addressof を利用しメソッドを割り振ります。

  1: Dim wfApps = New System.Activities.WorkflowApplication(wfFile)
  2: wfApps.Completed = AddressOf Completed
  3: wfApps.Run()
  4: 
  5: 
  6: Private Sub Completed(ByVal e As WorkflowApplicationCompletedEventArgs)
  7:     MessageBox.Show("Workflow is Completed!")
  8: End Sub


このような形で組み込むことで、Workflow の状態通知に対して処理を行う事ができるようになります。



WorkflowServiceHost については WCF の知識が必要になります。ただこれもそう難しいところではないと思っていますので、そのうちサンプル等作成してみたいと思います。

0 件のコメント:

コメントを投稿