0

親ワークフローによって動的にロードされた子ワークフローを実行しています。子ワークフローの実行中に、現在の子ワークフローを中止し、親ワークフローからのユーザー入力に応じて、動的にロードされたファイル(.xaml)から新しいワークフローを開始します。
親ワークフローは、サービスとして公開される状態マシンであり、状態の入力メソッドで別の読み込まれた子ワークフローを実行する状態(Microsoft.Activities.Extensionsを使用)を持ちます。子ワークフローを変更するトリガーに。子ワークフローは、状態マシンでもシーケンシャルでもかまいません。トリガーによる子ワークフローの中断

答えて

3

ワークフローを中止するには2通りの方法があります。

  1. ホストWorkflowApplication
  2. ワークフロー自体があなたのケースで終了アクティビティ

を使用することができ、Microsoft.Activities.Extensionsは、ワークフローを呼び出すためにWorkflowInvokerを使用して、あなたはその子ワークフローを中断することはできませんあなたの唯一の選択肢は、子ワークフローが何らかの "信号"をチェックしてループしている場合に終了させることです。

この「信号」は、ファイルの存在可能性があり、データベースのレコードなど

+0

私は何をしたいの外部トリガ(親ワークフローへのWCF呼び出し)によって子ワークフローを停止することです。私の子ワークフローがステートマシンでもあり、子ワークフローの状態を最終状態に変更したいとしましょう。それは可能ですか? –

+0

はい、可能ですが、終了できるようにしたいすべての状態から2つの遷移が必要です。だから、いくつかの州と最終的な州があるとしましょう。あなたが中止できる必要がある州ごとに、少なくとも2つのトリガーが必要です。 1つはトリガでReceiveを持ちます(これはワークフローを停止するために呼び出すエントリポイントです)。その他は処理の対象となります。しかし、他の人は、Receiveに到達できるようにブックマークを発行するものを実装しなければなりません!だから私はここに@RonJacobsアプローチで行くと思う。 –

+0

Microsoft.Activities.ExtensionsはWorkflowInvokerを使用して子ワークフローを呼び出すため、アクティビティやブックマークを受信することはできません。子ワークフローは、WorkflowInvokerが実行できるものでなければなりません。より複雑なものが必要な場合は、WorkflowApplicationに基づいたより高度なバージョンのInvokeWorkflowを作成する必要があります。これは手間がかかります。親ワークフローと子ワークフロー間のメッセージングに固執するほうがよいでしょう。 –

関連する問題