2

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

我完全喜欢这篇文章:工作流服务的并行版本控制

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

错误:

无法找到已编译位置“auxData”的 ICompiledExpressionRoot。确保已编译包含此表达式的活动的定义。

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

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

1 回答 1

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;
    }        
于 2013-03-18T14:48:16.823 回答