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

NET6孤立模型Azure Durable Functions:无法解析FunctionsDurableClientProvider服务

解决.NET 6孤立工作者模型下Azure Durable Functions依赖解析错误

错误信息

Exception: System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Azure.Functions.Worker.Extensions.DurableTask.FunctionsDurableClientProvider' while attempting to activate 'Microsoft.Azure.Functions.Worker.Extensions.DurableTask.DurableTaskClientConverter'.

问题根源

在.NET孤立工作者模型中,Azure Durable Task扩展需要显式将相关服务注册到依赖注入容器中。你的Program.cs未完成这一步,导致DI容器无法解析Durable Client所需的依赖服务。

修复步骤

1. 更新Program.cs,注册Durable Task服务

修改ConfigureHostBuilder方法,在ConfigureFunctionsWorkerDefaults()之后添加.AddDurableTask()扩展方法,完成Durable服务的注册:

public static class Program
{
    public static Task Main(string[] args)
    {
        var host = ConfigureHostBuilder();
        return host.RunAsync();
    }

    private static IHost ConfigureHostBuilder()
    {
        return Host.CreateDefaultBuilder()
            .ConfigureFunctionsWorkerDefaults()
            .AddDurableTask() // 新增:注册Durable Task服务
            .UseConsoleLifetime()
            .Build();
    }
}

2. 修正host.json配置错误

你的host.json中,maxConcurrentActivityFunctions和maxConcurrentOrchestratorFunctions配置位置错误,它们应该属于durableTask节点的子配置,而非extensions的同级节点。修正后的配置如下:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensions": {
    "durableTask": {
      "hubName": "MyTaskHub",
      "storageProvider": {
        "connectionStringName": "AzureWebJobsStorage",
        "controlQueueBatchSize": 32,
        "partitionCount": 4
      },
      "tracing": {
        "traceInputsAndOutputs": false,
        "traceReplayEvents": false
      },
      "maxConcurrentActivityFunctions": 10, // 移至durableTask节点内
      "maxConcurrentOrchestratorFunctions": 1 // 移至durableTask节点内
    }
  }
}

3. (可选)规范Orchestrator实现方式

在孤立工作者模型中,推荐使用属性标记的方式定义Orchestrator函数,而非继承TaskOrchestrator类(该方式属于旧版模型兼容写法)。示例如下:

public static class OrchestrationFunction
{
    [Function(nameof(OrchestrationFunction))]
    public static async Task<bool> RunOrchestrator(
        [OrchestrationTrigger] TaskOrchestrationContext context,
        ILogger logger)
    {
        var inputList = context.GetInput<List<string>>();
        string instanceId = context.InstanceId;

        logger.LogInformation($"Orchestrator function started. instanceId:{instanceId}");

        // 业务逻辑实现

        logger.LogInformation($"Orchestrator function completed.");
        return true;
    }
}

4. 确认包版本兼容性

确保项目中所有Azure Functions Worker相关包版本相互兼容,当前你的包版本组合是兼容的,若后续升级包版本,需保证Microsoft.Azure.Functions.Worker、Microsoft.Azure.Functions.Worker.Sdk和Microsoft.Azure.Functions.Worker.Extensions.DurableTask的版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:04:56