You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Azure函数基于类的编排器找不到异常排查

问题分析与解决方案

核心结论

.NET Isolated Worker模式下的Azure Functions仍然支持基于类的编排器和活动,你的问题源于包版本不兼容、代码名称不匹配以及缺少显式注册步骤,而非特性被移除。

问题根源

  1. 包版本冲突:你混用了预览版Microsoft.DurableTask.Generators(1.0.0-preview.1)与稳定版Microsoft.Azure.Functions.Worker.Extensions.DurableTask(1.2.2),二者兼容性差,导致类基编排器无法被自动发现注册。
  2. 编排器名称不匹配:客户端调用的是DocumentProcessingOrchestrator,但实际编排器类是ABCOrchestrator,名称不一致直接导致找不到目标编排器。
  3. Isolated Worker模式要求显式注册:新版本Durable Task扩展在Isolated模式下不会自动扫描类基编排器,必须手动注册。

修复步骤

1. 统一Durable Task相关包版本

移除预览版生成器包,替换为兼容的稳定版Durable Task组件:

<!-- 删除预览版包 -->
<!-- <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" /> -->
<!-- 添加匹配的稳定版包 -->
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.2.2" />
<PackageReference Include="Microsoft.DurableTask.Client" Version="1.0.4" />
<PackageReference Include="Microsoft.DurableTask.Worker" Version="1.0.4" />

注:Microsoft.DurableTask.Client和Microsoft.DurableTask.Worker版本需与Microsoft.Azure.Functions.Worker.Extensions.DurableTask兼容,建议使用对应稳定版本。

2. 修正编排器名称匹配

客户端代码中调用的编排器名称必须与实际类的DurableTask属性指定名称一致:

// 将DocumentProcessingOrchestrator改为ABCOrchestrator
instanceId = await client.ScheduleNewOrchestrationInstanceAsync(nameof(ABCOrchestrator), dmsFileUploaded);

3. 显式注册类基编排器与活动

在Program.cs中添加Durable Task Worker配置,手动注册你的编排器和活动类:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        services.AddDurableTaskWorker(builder =>
        {
            // 注册编排器
            builder.AddOrchestrator<ABCOrchestrator>();
            // 注册活动(如果有类基活动)
            builder.AddActivity<SomeActivity>();
        });
    })
    .Build();

host.Run();

4. 清理编排器属性的冗余空格

确保DurableTask属性的名称参数无多余空格:

// 移除属性中的空格
[DurableTask(nameof(ABCOrchestrator))]
public class ABCOrchestrator : TaskOrchestrator<string, string>
{
    // ... 现有代码
}

补充说明

基于类的编排器/活动是Durable Task Framework的原生特性,在Isolated Worker模式下完全支持,只是相较于旧的In-Process模式,包依赖和注册逻辑有调整。只要确保版本兼容、名称匹配、显式注册,就能恢复正常运行。

内容的提问来源于stack exchange,提问作者amit jhatakia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:42:32