Windows工作流4.5的并行版本控制-如何加载正确版本的业务dll



我已经托管了两个版本的工作流(WF 4.5)。遵循MSDN示例中的说明-https://code.msdn.microsoft.com/windowsapps/Side-by-Side-Versioning-0fe24cd3.所提供的并行功能允许配置工作流服务,以便使用新的工作流定义创建工作流服务的新实例,同时使用现有定义完成运行实例。

工作流(xamlx)使用了另一个类库"MessageGeneration.dll"中定义的一些函数。这些函数也发生了更改。因此,工作流和MessageGeneration.dll有两个版本。WF-v1应该使用MessageGeneration.dll-v1,WF-v2应该使用MessageGenerator.dll-v2。

任何解决此问题的建议都将有所帮助。谢谢

我不熟悉WF流程的工作方式,但以下方法通常适用于此类场景:

您可以在配置文件(app.config/web.config)上为特定版本指定二进制位置,CLR在解析二进制文件时会查找该位置。CodeBase的一般信息。

这里有一个例子:

<dependentAssembly>
<assemblyIdentity name="assembly name" publicKeyToken="token" culture="neutral" />
<codeBase version="specific version" href="bin/binary.dll" />
<codeBase version="specific version" href="bin/subBin/binary.dll" />
</dependentAssembly>

这里,subBin下的binary.dll是所讨论的二进制文件的v2。现在,为了实现这一点,WF不应该尝试将两个二进制文件实例化在一起。这可以通过删除任何查找该二进制文件的公共代码路径来处理。您可能可以使用一个工厂来调用上面二进制文件上的方法,该工厂将方法标记为内部,这样当WF进程实例化时,就不会加载binary.dll。

它将无法加载二进制文件,因为代码基href是错误的。使用Procmon查看要探测哪些位置以加载二进制文件。根据procmon报告,可以固定配置上的路径,也可以将二进制文件放入二进制文件中。

最新更新