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

Azure Durable Orchestration Function无法运行问题求助

问题分析

你遇到的类型转换错误,核心原因是代码采用了Azure Functions In-Process模式的Durable API写法,但部署的是.NET Isolated(独立进程)模式。两种模式的Durable Functions绑定、API完全不兼容,导致Orchestration Trigger无法正确解析上下文对象,抛出System.String转IDurableOrchestrationContext的异常。

解决方案

需要将代码完全适配.NET Isolated模式的Durable Functions规范,步骤如下:

1. 更新NuGet依赖

移除原有的Microsoft.Azure.WebJobs.Extensions.DurableTask包,安装.NET Isolated模式对应的Durable扩展:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.DurableTask
dotnet add package Microsoft.Azure.Functions.Worker
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Http

确保所有包的版本保持一致(建议使用最新稳定版)。

2. 修改HTTP Trigger代码

Isolated模式下,Durable客户端使用DurableTaskClient替代IDurableOrchestrationClient,HttpRequest类型为HttpRequestData,返回值为HttpResponseData:

using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.Functions.Worker.Extensions.DurableTask;
using Microsoft.Extensions.Logging;

public class DurableHttpStart
{
    private readonly ILogger _logger;

    public DurableHttpStart(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<DurableHttpStart>();
    }

    [Function("DurableHttpStart")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
        [DurableClient] DurableTaskClient starter)
    {
        string instanceId = await starter.ScheduleNewOrchestrationInstanceAsync("OrchestratorFunction");

        _logger.LogInformation($"Started orchestration with ID = '{instanceId}'.");

        return starter.CreateCheckStatusResponse(req, instanceId);
    }
}

3. 修改Orchestrator函数代码

Isolated模式下,Orchestration Trigger的上下文类型为TaskOrchestrationContext,函数无需静态,签名调整如下:

using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.DurableTask;
using Microsoft.Extensions.Logging;
using SpreadsheetGear;

public class OrchestratorFunction
{
    private readonly ILogger _logger;

    public OrchestratorFunction(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<OrchestratorFunction>();
    }

    [Function("OrchestratorFunction")]
    public async Task<List<string>> RunOrchestrator(
        [OrchestrationTrigger] TaskOrchestrationContext context)
    {
        var finalResult = new List<string>();
        // 后续业务逻辑写在这里
        return finalResult;
    }
}

4. 确认host.json配置

确保host.json中指定了正确的worker运行时:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensions": {
    "durableTask": {
      "hubName": "DurableFunctionsHub"
    }
  },
  "runtime": {
    "functionRuntime": "dotnet-isolated"
  }
}

5. 本地测试与部署

  • 本地运行时,使用func start --dotnet-isolated命令启动,确保工具链是最新版的Azure Functions Core Tools。
  • 部署到Azure时,确认函数应用的运行时堆栈设置为.NET Isolated,版本选择对应你的项目框架版本(如.NET 6/7/8)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:47:03