【问题标题】:What can cause WF4 to complain about out-of-sequence calls improperly?什么会导致 WF4 不正确地抱怨乱序调用?
【发布时间】:2015-03-23 19:45:13
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: workflow-foundation-4 workflow-foundation-4.5


    【解决方案1】:

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

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

    我在启用 WF 跟踪时发现的(请参阅 link)。查看相关问题 XAMLX Workflow with c# expressionsActivity 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 是我在其中放置从其他地方粘贴的代码以进行表达式编译的类。

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多