使用代码库/探测路径的不同路径中的Workflow Foundation 4程序集



我们有一个使用WF4工作流服务实现的长期运行的工作流。我们目前遇到的问题是,当部署新版本的工作流时,现有的持久化实例无法加载。我在Workflow Foundation中看到了"如何管理版本?"?(然后导致http://msmvps.com/blogs/theproblemsolver/archive/2008/09/10/versioning-long-running-workfows.aspx?ocid=aff-n-we-loc-DEV40909&WT.mc_id=aff-n-we-loc--DEV4099)使用app.config.中的代码库href提示管理不同版本

这适用于没有任何自定义代码活动的简单工作流-我在IIS 7应用程序中部署了XAMLX,创建了一个子目录(bin/v1)并将DLL放在那里,并指定了如下探测路径:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="v1" />
<probing privatePath="bin/v1" /> <!-- one of these is probably redundant... -->
</assemblyBinding>
</runtime>

然而,当我添加自定义代码活动时,XAMLX似乎有一个对程序集的引用,如下所示(我已经从中排除了标准程序集):

<WorkflowService mc:Ignorable="sap sads" ConfigurationName="Service1"
sap:VirtualizedContainerService.HintSize="307,436" Name="Service1"
mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces"
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
...
xmlns:p1="http://schemas.microsoft.com/netfx/2009/xaml/activities"
**xmlns:p2="clr-namespace:PromotionWorkflowV1;assembly=PromotionWorkflowV1"**
xmlns:s="clr-namespace:System;assembly=mscorlib"
...
>

当我尝试在浏览器中导航到WF服务时,我会得到一个语法分析器错误,比如:

Cannot create unknown type '{clr-namespace:PromotionWorkflowV1;assembly=PromotionWorkflowV1}SubmitActivity'.' Line number '42' and line position '6'.

我推测这是因为WF在解析XAMLX时不查看探测路径?在这个场景中,是否还有其他可以做的事情可以实现版本控制?

谢谢,-Srinivas

@Will,我做了一个iisreset,也能够捕获这个绑定。谢谢

我重新查看了fuslogvw日志,结果发现问题出在我指定探测路径的方式上。以下内容:

<probing privatePath="v2" />
<probing privatePath="bin/v2" />

只尊重第一条道路,而不尊重第二条道路。第一个没有成功,因为这被认为是来自网络应用程序的根,而第二个没有被考虑

当我删除第一条路径时,绑定成功了。根据MSDN文档指定多个路径的另一个选项是:

<probing privatePath="v2;bin/v2" />

我还发现在";"后面有一个空格也不起作用,因为这个空格也在路径中使用,所以它变成了"D:/myDir/bin/v2")。

一个观察结果是XAMLX文件只有程序集名称,而没有版本。我手动编辑它以指定版本号,现在这也获得了正确的DLL版本。

谢谢你的帮助!(再加上提醒不要想当然,并仔细阅读文档。:-)

相关内容

  • 没有找到相关文章

最新更新