WF4.5没有编译并排的c#工作流程

时间:2013-03-14 15:07:08

标签: c# iis workflow-foundation-4 workflow-foundation

我有一个带有c#表达式的IIS托管的xamlx工作流程,我正试图在并行版本控制中运行。

我确实喜欢这篇文章:Side by side versioning of workflow services

工作流的新实例按预期工作,但是当我调用工作流的先前版本的实例时,它会引发错误,告诉我它没有编译。

错误:

  

无法找到已编译位置的ICompiledExpressionRoot   'AUXDATA'。确保包含活动的定义   这个表达式已被编译。

顺便说一下,我有一个编制工作流程的自定义工厂。

<serviceActivations>        
    <add service="Service1.xamlx" relativeAddress="~/Service1.xamlx" factory="MyServiceHostFactory" />
</serviceActivations>

1 个答案:

答案 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;
    }