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 实例。

什么可能导致这种行为,我们如何解决它?此外,如果有人有升级不涉及并行运行程序集(同一应用程序域中的旧版本和新版本)的工作流的策略,他们将受到欢迎。

4

1 回答 1

2

程序集解析事件对更改序列化类型程序集引用没有任何作用。您是否尝试过在机器级别从 v1 到 v2 的程序集绑定重定向。

更新:我确实找到了这个链接,它讨论了使用绑定重定向将旧工作流转发到使用 applyTo 属性的新版本。

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

于 2012-04-19T23:21:31.507 回答