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

.NET 6孤立模式Azure函数:持久编排无法调用持久实体

.NET 6孤立模式Durable Functions编排未触发的排查与解决建议

一、检查Program.cs配置正确性

  • 确保AddDurableTask配置明确支持实体,孤立模式下需显式配置:
    builder.Services.AddDurableTask(options =>
    {
        options.EntityMessageReorderWindow = TimeSpan.FromMinutes(1);
        options.StorageProvider.ConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
    });
    
  • 确认Host构建逻辑完整,示例:
    var host = new HostBuilder()
        .ConfigureFunctionsWorkerDefaults()
        .ConfigureServices(services =>
        {
            services.AddDurableTask();
        })
        .Build();
    
    host.Run();
    

二、验证编排与启动函数的注解规范

  • 编排函数需保留[FunctionName]注解,触发类型为[OrchestrationTrigger]:
    [FunctionName("MyOrchestrator")]
    public static async Task RunOrchestrator(
        [OrchestrationTrigger] IDurableOrchestrationContext context)
    {
        var entityId = new EntityId("MyEntity", "entity1");
        await context.SignalEntityAsync<IMyEntity>(entityId, e => e.DoWork());
    }
    
  • 启动函数需使用孤立模式专属的[DurableClient]注解获取客户端:
    [FunctionName("StartOrchestration")]
    public static async Task<IActionResult> Start(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req,
        [DurableClient] IDurableOrchestrationClient client)
    {
        string instanceId = await client.StartNewAsync("MyOrchestrator", null);
        return new OkObjectResult($"Orchestration started with ID = '{instanceId}'.");
    }
    

三、确认Durable Entity定义合规

  • 实体类需用[EntityName]标记,且实现对应接口:
    [EntityName("MyEntity")]
    public class MyEntity : IMyEntity
    {
        public void DoWork()
        {
            // 实体业务逻辑
        }
    
        [FunctionName(nameof(MyEntity))]
        public static Task Run([EntityTrigger] IDurableEntityContext context)
        {
            return context.DispatchAsync<MyEntity>();
        }
    }
    
    public interface IMyEntity
    {
        void DoWork();
    }
    
  • 实体触发函数的FunctionName需与类名一致,触发类型为[EntityTrigger]。

四、本地调试环境排查

  • 确保Azure存储模拟器(或Azurite)已启动,连接字符串配置为UseDevelopmentStorage=true。
  • 查看函数输出日志,排查是否存在存储连接失败、注解不匹配、名称大小写错误等异常信息。
  • 确认Microsoft.Azure.WebJobs.Extensions.DurableTask 2.9.2版本与.NET 6孤立模式兼容,也可尝试升级至最新稳定版适配。

五、Azure部署后额外检查

  • 确认函数应用的AzureWebJobsStorage应用设置已配置正确的存储账户连接字符串。
  • 检查函数应用运行时版本为.NET 6(孤立模式),可在Azure门户>函数应用>配置>常规设置中查看。
  • 开启Azure函数日志流,排查部署后的触发异常或报错信息。

六、常见细节问题

  • 编排名称大小写必须完全匹配:StartNewAsync中指定的名称需与编排函数[FunctionName]一致。
  • 实体名称需匹配:调用实体时的EntityId中的名称需与实体类[EntityName]注解一致。
  • 网络权限:本地调试确保防火墙不阻止函数连接存储模拟器;Azure部署确保存储账户防火墙允许函数应用访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:32:47