使用新版本程序集加载以前版本的工作流程

时间:2012-04-05 09:16:01

标签: .net workflow-foundation

我正在尝试找出一种方法来升级我们的worklow运行时使用的程序集(自定义活动),同时仍然可以加载(反序列化)旧实例。 我的情况是这样的:

  1. 使用CustomActivities v.1.0.0.0
  2. 创建并保留了工作流实例
  3. 部署具有CustomActivities v.2.0.0.0
  4. 的产品的新版本
  5. 尝试在新运行时中加载以前的工作流程
  6. 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实例相互依赖。

    可能导致此行为的原因以及我们如何解决这个问题? 此外,如果任何人都有升级工作流程的策略,而不涉及并行程序集(同一应用程序域中的旧版本和新版本),则会受到欢迎。

1 个答案:

答案 0 :(得分:2)

程序集解析事件不会更改序列化类型程序集引用。您是否尝试过在机器级别从v1到v2的装配绑定重定向。

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

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