8

この問題を解決する方法(WF4):

xamlでワークフローを作成し、そのいくつかのインスタンスを開始します。永続化ストアがあり、すべてのワークフローがワークフローの途中でブックマークに永続化されます。

今、私はアプリケーションを停止します

アプリケーションを再起動すると、すべてが再開され、enは正常に完了します。

しかし、実行中のインスタンスが持続した後にワークフロー定義を変更したい場合はどうなりますか?(私が見つけた)実行中のワークフローをロードする唯一の方法は、次の方法です。

        WorkflowApplication wfapp = new WorkflowApplication(new WorkflowDefinition());
        wfapp.InstanceStore = new SqlWorkflowInstanceStore(connStr);

        wfapp.Load(wfGuid);

したがって、ワークフロー定義が必要です。永続化中に変更された場合、状況はひどく悪くなります。

これを解決するための最良の方法は何ですか?

4

5 に答える 5

3

このシナリオは少し問題です。古いワークフロー定義を新しい形式に移行する方法はありません。まだ実行されていないアクティビティを追加/削除して、いくつかの限定的なテストといくつかのシナリオを実行しましたが、正常に機能しました。しかし、それから私はまた、すでに終了した活動を再実行することを含む、ひどく間違ったシナリオを持っています。

私の知る限り、ワークフローの作成に使用されたXAML /アセンブリのバージョンを追跡し、ワークフローを再開するときに使用するワークフローバージョンを決定することを確認する以外に、問題を解決する良い方法はありません。

于 2010-01-15T12:25:29.497 に答える
2

同じワークフローの多くのバージョンが共存する必要があります。つまり、古いインスタンスは古いワークフローバージョンで終了する必要があり、新しいインスタンスは新しいワークフローバージョンで開始する必要があります。私の場合、ワークフローサービスがあります。これは、ルーターがインスタンスの実行を試みる順序を記述する構成にあります。インスタンスが1つのバージョンで動作を開始できない場合は、次のバージョンが試行されます。

また、変更にワークフロー変数の変更や公開されたコントラクトなどが含まれていない場合は、新旧のワークフローインスタンスバージョンを同じワークフローバージョンで実行できます。あなたはそれを知っているでしょう、それをテストします。

于 2011-04-04T07:53:07.610 に答える
2

それは役立つかもしれません

http://msdn.microsoft.com/en-us/magazine/dd727506.aspx

于 2010-04-07T09:51:37.930 に答える
1

これはSQL永続性サービスであるため、Windowsワークフローではそれほど問題にはなりません。古いワークフローから新しいワークフローへの変換をサポートするか、XML / JSONとしてシリアル化する永続化サービスなどのより抽象的なもの(1つの逆シリアル化をより簡単にサポートする可能性があるもの)をサポートすることで、この状況を処理できる独自の永続化サービスを作成できます。別のバージョンとしてのバージョン。

于 2010-01-26T22:06:23.043 に答える
1

WF4で定義を変更した後、永続化されたwfインスタンスをロードすることができます。wfエンジンが格納するxmlファイルを解析して変更する必要があります。古いバージョンと新しいバージョンの2つの等しいワークフローを作成し、違いを取り除くためにそれらを比較する必要があります。これは、ワークフローの状態を格納するために使用される定義xmlと複雑なデータxmlに対して実行する必要があります。LinqToXMLで解析すると時間を大幅に節約でき、すべての違いを確認したことを確認する必要があります。違いが1つ残っていると、wfをロードできなくなります。「ResumeData」という要素が1つあります。これは、wf状態のxmlにあり、解析するには重すぎますが、簡単に削除できるのは朗報です。

于 2014-01-09T11:35:42.080 に答える