10

古いインスタンスをロード (逆シリアル化)しながら、ワークフロー ランタイム (カスタム アクティビティ) で使用されるアセンブリをアップグレードする方法を見つけようとしています。私の状況は次のとおりです。

  1. ワークフロー インスタンスを作成し、CustomActivitiesv.1.0.0.0で永続化する
  2. CustomActivitiesv.2.0.0.0の新しいバージョンの製品を展開する
  3. 新しいランタイムで以前のワークフローをロードしてみてください

v.1 と v.2 の違いは、アセンブリに追加のクラスがいくつかあることです。既存の型の構造は変更されていないため、バイナリの逆シリアル化は引き続き機能すると思います。AssemblyResolveイベントを使用して、すべてのタイプを v.1 から v.2 にリダイレクトしています

if (args.Name.Contains("CustomActivities"))
{
    Type someTypeFromCustomActivities = typeof(WorkflowType);
    return someTypeFromCustomActivities.Assembly;
}

しかし、逆シリアル化プロセス中のある時点で、次の例外が発生します。

SerializationException: ID 153 のオブジェクトは、すべての依存関係を解決できない IObjectReference インターフェイスを実装しています。考えられる原因は、相互に依存関係を持つ IObjectReference の 2 つのインスタンスです。

何がこの動作を引き起こす可能性があり、どのように回避できますか? また、サイド バイ サイド アセンブリ (同じアプリ ドメイン内の古いバージョンと新しいバージョン) の実行を伴わないワークフローをアップグレードするための戦略がある場合は、歓迎されます。

4

1 に答える 1

2

アセンブリ解決イベントは、シリアル化された型のアセンブリ参照を変更するために何もしません。v1 から v2 へのマシン レベルでのアセンブリ バインディング リダイレクトを試しましたか。

更新: applyTo 属性を使用して、バインド リダイレクトを使用して古いワークフローを新しいバージョンに転送する方法について説明しているこのリンクを見つけました。

http://msdn.microsoft.com/en-us/library/aa349375.aspx

于 2012-04-19T23:21:31.507 に答える