我试图找出一种方法来升级我们的工作流运行时(自定义活动)使用的程序集,同时仍然能够加载(反序列化)旧实例。我的情况是这样的:
- 使用
CustomActivities
v.1.0.0.0创建和持久化工作流实例 - 部署新版本的产品女巫有
CustomActivities
v.2.0.0.0 - 尝试在新的运行时加载以前的工作流
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 实例。
什么可能导致这种行为,我们如何解决它?此外,如果有人有升级不涉及并行运行程序集(同一应用程序域中的旧版本和新版本)的工作流的策略,他们将受到欢迎。