2013-03-14 35 views
2

我有一个IIS托管xamlx工作流与c#表达式,我试图在并行版本运行。WF4.5不编译并行c#工作流程

我做这篇文章完全一样:Side by side versioning of workflow services

工作流的新实例正常工作,但是当我打电话的工作流程的一个早期版本的实例,它提出了一个错误,告诉我,它不是编译。

错误:

Unable to locate the ICompiledExpressionRoot for compiled location 'auxData'. Make sure that the definition for the activity containing this expression has been compiled.

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

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

回答

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