2011-12-09 11 views
0

ワークフローは、主に同一の要素で構成されています。各要素は次のように定義され
:ワークフローは、単にシーケンスでこれらの要素をスタックすることができる、それは並列に実行できるすべてのワークフローシーケンスがアイドル状態であることを検出します。

Workflow element

、それは等、それらの間で分岐していることができる - のための完全な自由をワークフロー設計者。すべてがWCFサービスとしてホストされていますが、可能であれば、それに頼ることはしません。

この全体のセットアップのハイレベルな考え方は以下の通りです:

  1. ワークフローが開始すると、これらの要素がすぐにトップ条件分岐をスキップ、次々にアップ発射開始します。前の要素が完了すると、ワークフローで定義されている次の要素が開始されます。
  2. ある時点で、条件[B]が正しい場合、要素は下位の分岐をとり、WCF呼び出しを待機することがあります。
  3. 遅かれ早かれ、すべての要素がこの種の停止になるか、ワークフローが完全に終了します。

私が必要とするのは、すべての要素がWCFコールを待つのを止めるその瞬間を捉えることです。

その時点で、私はワークフローのさらなる流れに影響するいくつかの計算を実行する必要があります。したがって、私はその瞬間を正確に把握する必要があります。

いくつかの注意:

  1. 私は、これらの計算を行う前に、何のWCF呼び出しが来ないことを保証します。したがって、WCF呼び出しに関連する可能性のある競合状態は範囲外です。
  2. 私は制御フローを制御するアプリケーションを持っていません。言い換えれば、私はIISでホストされているため、予告なしに再起動する可能性があり、タイマー、長時間実行するループ、メッセージポンプなどをセットアップすることはできません。
  3. 私はワークフローの設計を制御しません。
  4. しかし、私は要素のデザインを完全に制御しています。実際には、この要素は実際にはNativeActivityです(そのため、図がVisioから:-)、私はそのソースコードを制御しています。
  5. 私はまた、ある程度、ホスティング環境を制御します。つまり、ワークフローがホストされているWebアプリケーションに変更を加えることができます。
  6. ワークフロー全体がビジネスオブジェクトに「添付」され、すべての要素がそのオブジェクトにアクセスできます。

答えて

0

これを実行する最善の方法は、TrackingParticipantという拡張機能を作成することです。この拡張機能は、Trackメソッドのすべての追跡レコードを受け取ります。次に、WorkflowInstanceStateRecordを受信し、状態が「Idle」になると、ワークフローがアイドルであることがわかります。アクティビティは、このエクステンションにアクセスして、このエクステンションからデータを受信したり、そのエクステン

この

はリードをありがとう、私は Introduction to State Machine Hands On Lab

+0

に使用される技術です。しかしながら。私は 'WorkflowInstanceStateRecord'というクラスを見ません。 'TrackingParticipantの最初の引数。Track'メソッドは 'TrackingRecord'であり、' State'などの名前のプロパティはありません。ワークフローホストにアクセスしてIDでワークフローインスタンスを取得できるサービスロケータも表示されません。どんな助け? –

+0

ああ、持っています! WorkflowInstanceRecord'の中に「State」はありません。それを今見つけた。私が掘っているうちにホールドしてください... –

+0

幸いなことに、トラッキング参加者と一緒に沈黙の瞬間を傍受することができます。しかし、今私は自分自身が、その参加者の内部から関連するビジネスオブジェクトに到達することができないことが分かりました。私の活動は、ワークフロー拡張として登録されているDIコンテナからリポジトリを取得します。アクティビティは、 'NativeActivityContext'を介してDIコンテナに到達できます。しかし、参加者はどうですか? –

関連する問題