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

将Azure Functions项目迁移至Durable Azure Functions遇Http函数显示问题求助

排查Durable Function未显示为HTTP函数的问题

首先得明确一个核心点:Durable Functions的编排器函数(比如你说的HelloSequence)本身并不是HTTP触发的——它是由Durable Task框架内部触发执行的,不会直接出现在HTTP函数列表里。你看到它被标记为Durable Function是完全正常的,真正需要对外暴露的是用来启动编排的HTTP触发客户端函数。

下面是具体的排查和解决步骤:

1. 确认项目中是否存在HTTP触发的客户端函数

E1_HelloSequence示例里应该配套有一个用来启动编排的HTTP触发函数,通常命名类似StartHelloSequence。它的作用是接收外部HTTP请求,然后调用Durable客户端来启动HelloSequence编排。检查你的项目里有没有类似这样的代码:

[FunctionName("StartHelloSequence")]
public static async Task<IActionResult> Start(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
    [DurableClient] IDurableOrchestrationClient starter,
    ILogger log)
{
    // 生成编排实例ID
    string instanceId = await starter.StartNewAsync("HelloSequence", null);

    log.LogInformation("Started orchestration with ID = '{instanceId}'.", instanceId);

    // 返回包含编排状态查询链接的响应
    return starter.CreateCheckStatusResponse(req, instanceId);
}

如果缺失这个客户端函数,自然不会有对应的HTTP函数被列出——你需要添加这个HTTP触发的入口来启动编排流程。

2. 检查Durable Functions的依赖包与配置

  • 确保你引用了正确的NuGet包:Microsoft.Azure.WebJobs.Extensions.DurableTask,并且包版本和你的Azure Functions运行时版本兼容(比如.NET 6+隔离进程模型要对应匹配的包版本)。
  • 检查local.settings.json中的必要配置,Durable Functions依赖存储来保存编排状态,必须配置AzureWebJobsStorage:
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet", // 根据你的运行时调整,比如nodejs/python
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  }
}

3. 验证编排器函数的注解是否正确

检查HelloSequence的注解是否符合编排器函数的要求,关键是[OrchestrationTrigger]注解,它告诉框架这是一个Durable编排器,而非HTTP触发函数:

[FunctionName("HelloSequence")]
public static async Task<List<string>> RunOrchestrator(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    var outputs = new List<string>();

    // 调用活动函数完成业务逻辑
    outputs.Add(await context.CallActivityAsync<string>("HelloSequence_SayHello", "Tokyo"));
    outputs.Add(await context.CallActivityAsync<string>("HelloSequence_SayHello", "Seattle"));
    outputs.Add(await context.CallActivityAsync<string>("HelloSequence_SayHello", "London"));

    return outputs;
}

4. 查看本地运行时的日志输出

启动本地Functions运行时后,仔细观察日志:

  • 如果客户端函数存在且配置正确,日志里会出现类似Http Functions: StartHelloSequence: [GET,POST] http://localhost:7071/api/StartHelloSequence的条目,这就是你可以用来触发编排的HTTP入口。
  • 编排器函数HelloSequence被列为Durable Function是正常行为,它本身不需要也不会出现在HTTP函数列表里。

总结来说:你看到HelloSequence被识别为Durable Function是正确的,问题出在缺少对应的HTTP触发客户端函数来启动它,按照上面的步骤补全配置和代码即可。

内容的提问来源于stack exchange,提问作者Tiago Andrade e Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:41:18