0

長時間実行されているワークフロー インスタンスを将来新しいワークフロー定義にアップグレードできるようにするために従うべき正しいプロセスは何ですか。

既存のワークフロー インスタンスのアップグレードに使用するマッピング ファイルをDynamicUpdateServices.PrepareForUpdate後で呼び出して生成できるように、新しい変更を行う前に、既存の XAML に対して呼び出す必要があることはわかっています。DynamicUpdateServices.CreateUpdateMap

を呼び出した後にどのワークフロー定義 (XAML) ファイルを変更する必要があるかは、私にはよくわかりませんDynamicUpdateServices.PrepareForUpdate。を呼び出した後に作成された (複製された) XAML ファイルですかDynamicUpdateServices.PrepareForUpdate。それとも元の XAML ファイルですか?

複製された XAML ファイルが当然の選択であるように思われますが、問題があります。複製された XAML ファイルにはViewStateManagerタグが含まれていないため、元の XAML にあったすべてのレイアウトが失われます。

一方、元の XAML を使用する場合、更新マップはどのように生成すればよいですか?

4

1 に答える 1

1

私は MS サポートに連絡し、最終的にそれがどのように機能するかを理解しました。

複製された定義に実際に触れる必要はありません。以前は理解できなかった重要な概念は、DynamicUpdateServices.PrepareForUpdate()実際には XAML ファイルを準備することではなく、WF ランタイム自体を準備して、変更された XAML を生成された複製コピーと比較して更新マップを生成できるようにすることです ( )が呼び出されたときにメモリに保存されますDynamicUpdateServices.PrepareForUpdate()。したがって、典型的なプロセスは次のようになります。

  1. ワークフロー定義の展開 ( v1 xaml)
  2. ワークフロー定義を変更します ( v2 xaml)
  3. ワークフロー定義のデプロイ ( v2 xaml) * 代わりに手順 5 の後に実行することもできます
  4. DynamicUpdateServices.PrepareForUpdate()反対の呼び出しv1 xaml(ソース管理から取得)
  5. 更新マップの生成DynamicUpdateServices.CreateUpdateMap()
  6. 永続化され、v1 xaml( WorkflowApplication.Load(instance, updateMap))から開始された既存のワークフロー インスタンスに更新マップを適用します。

ステップ 4 と 5 は、同じプロセス インスタンスで実行する必要があります (または、ほとんどの場合、同じホストで実行することを意味します)。

于 2013-11-21T06:04:36.610 に答える