0

我有一个(非常)简单的工作流程。工作流的前三个操作是:

  1. GetWorkflowId(检索工作流 ID 的简单自定义步骤)
  2. InitializeCorrelation(原版)
  3. 接收 Xyz

工作流程中共有 9 个接收。当我在我的单元测试中运行它们(使用 WorkflowServiceTestHost)时,它工作得很好。

但是,当我尝试从客户端调用第一个接收入口点 (Xyz) 时,我收到以下错误:

目前无法对标识符为“ffd6c56d-529f-4f42-ba81-f30c5ea9348d”的服务实例执行“Xyz |{ http://tempuri.org/}IService ”操作。请确保以正确的顺序执行操作,并且使用中的绑定提供有序的交付保证。

我已经尝试了各种方法来获取更多关于此的信息,但都是空的。我有一个 SQL Server 持久性数据库,并检查了它的工作流实例,但那里的 InstancesTable 总是空的。

我开始怀疑我是否在 WF4 中遇到了错误。

4

1 回答 1

0

显示的错误是虚假和误导性的。真正的错误是

System.NotSupportedException:表达式活动类型“CSharpValue`1”需要编译才能运行。请确保已编译工作流。

我在启用 WF 跟踪时发现的(请参阅链接)。查看相关问题 XAMLX Workflow with c# expressions and Activity throws exception when C# expression uses reference types 我意识到,因为我已经重写WorkflowServiceHostFactory了,所以我现在必须显式编译 C# 表达式。在覆盖中这样做可以解决问题。

结果如下所示:

 public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
 {
     var result = new WorkflowServiceHostFactory().CreateServiceHost(constructorString, baseAddresses) as WorkflowServiceHost;
     WorkflowUtilities.CompileExpressions(result.Activity);
     return result;
 }

WorkflowUtilities我将从其他地方粘贴的代码用于进行表达式编译的类在哪里。

于 2015-03-24T20:48:44.703 回答