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

.NET 6 Azure Functions项目能否兼容两种Function特性?

问题:.NET 6 Azure Functions中Worker模型函数与Durable Functions共存问题

我正在维护一个基于.NET 6的Azure Functions项目,其中包含使用Microsoft.Azure.Functions.Worker.FunctionAttribute定义的Worker模型函数,示例代码如下:

using Microsoft.Azure.Functions.Worker;

[Function("TestFunction")]
public async Task Run([HttpTrigger(AuthorizationLevel.Function, 
    FunctionSettings.HttpGet, Route = FunctionSettings.CycleCountEndpoint)] 
    FunctionContext context)
    {
        await _repo.RunSomething();
    }
}

之后为处理长运行任务,添加了使用Microsoft.Azure.WebJobs.FunctionNameAttribute定义的Azure Durable Function,代码如下:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Net.Http;

public static class TestDurableFunction
{
    [FunctionName("TestDurableFunction")]
    public static async Task<HttpResponseMessage> 
        HttpStart([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] 
        HttpRequestMessage req,
        [DurableClient] IDurableOrchestrationClient starter,
        ILogger log)
        {
            string instanceId = await starter.StartNewAsync("TestOrchestrator", null);
            log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
            return starter.CreateCheckStatusResponse(req, instanceId);
        }
}

运行项目时,带[Function("TestFunction")]的函数能在控制台显示,但带[FunctionName("TestDurableFunction")]的Durable函数不显示,想知道这两类函数能否在同一应用中共存并正常运行?


解决方案

这两类函数可以共存,但当前问题源于你混用了Azure Functions的两种运行时模型:隔离Worker模型(依赖Microsoft.Azure.Functions.Worker命名空间)和In-Process模型(依赖Microsoft.Azure.WebJobs命名空间)。Durable Functions对隔离模型有专门的适配要求,需按以下步骤调整:

1. 替换Durable相关NuGet包

移除基于In-Process模型的Microsoft.Azure.WebJobs.Extensions.DurableTask包,安装针对隔离Worker模型的Microsoft.Azure.Functions.Worker.Extensions.DurableTask包。

2. 适配Durable函数代码到隔离模型

修改Durable函数的属性、参数类型,匹配隔离模型的API规范:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Azure.Functions.Worker.Extensions.DurableTask;
using Microsoft.Extensions.Logging;

public static class TestDurableFunction
{
    [Function("TestDurableFunction")]
    public static async Task<HttpResponseData> HttpStart(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
        [DurableClient] IDurableOrchestrationClient starter,
        FunctionContext executionContext)
    {
        ILogger logger = executionContext.GetLogger("TestDurableFunction");
        string instanceId = await starter.StartNewAsync("TestOrchestrator", null);
        logger.LogInformation($"Started orchestration with ID = '{instanceId}'.");
        return starter.CreateCheckStatusResponse(req, instanceId);
    }

    [Function("TestOrchestrator")]
    public static async Task RunOrchestrator(
        [OrchestrationTrigger] IDurableOrchestrationContext context)
    {
        // 编写你的长运行任务编排逻辑
    }
}

3. 更新host.json配置

在项目的host.json中添加Durable Functions的配置节点,确保运行时能识别Durable扩展:

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            }
        }
    },
    "extensions": {
        "durableTask": {
            "hubName": "DurableFunctionsHub"
        }
    }
}

4. 统一依赖版本

确保项目中所有Azure Functions相关包(如Microsoft.Azure.Functions.Worker、Microsoft.Azure.Functions.Worker.Extensions.Http)的版本保持兼容,避免同时存在In-Process和隔离模型的包依赖。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:27:36