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

Adr*_*scu 10 .net workflow-foundation

我试图找到一种方法来升级我们的worklow运行时使用的程序集(自定义活动),同时仍然能够加载(反序列化)旧实例.我的情况是这样的:

  1. 使用CustomActivitiesv.1.0.0.0 创建并保留工作流实例
  2. 部署新版本的产品CustomActivitiesv.2.0.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;
}
Run Code Online (Sandbox Code Playgroud)

然而,在反序列化过程中的某些时候,我们得到以下异常:

SerializationException:ID为153的对象实现了IObjectReference接口,无法解析所有依赖项.可能的原因是两个IObjectReference实例彼此相互依赖.

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

Ste*_*ham 2

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

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

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