我有一个带有c#表达式的IIS托管的xamlx工作流程,我正试图在并行版本控制中运行。
我确实喜欢这篇文章:Side by side versioning of workflow services
工作流的新实例按预期工作,但是当我调用工作流的先前版本的实例时,它会引发错误,告诉我它没有编译。
错误:
无法找到已编译位置的ICompiledExpressionRoot 'AUXDATA'。确保包含活动的定义 这个表达式已被编译。
顺便说一下,我有一个编制工作流程的自定义工厂。
<serviceActivations>
<add service="Service1.xamlx" relativeAddress="~/Service1.xamlx" factory="MyServiceHostFactory" />
</serviceActivations>
答案 0 :(得分:4)
在分析了.Net的源代码后,我意识到我在自定义工作流工厂中覆盖的CreateWorkflowServiceHost方法在其返回对象中添加了所有支持的版本。
我所要做的就是迭代这个集合并将它们全部编译。
最终源代码:
protected override WorkflowServiceHost CreateWorkflowServiceHost(WorkflowService service, Uri[] baseAddresses)
{
var host = base.CreateWorkflowServiceHost(service, baseAddresses);
// add your customizations here…
CompileExpressions(service.Body);
foreach (var supportedVersion in host.SupportedVersions)
{
CompileExpressions(supportedVersion.Body);
}
return host;
}