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

Azure Function订阅Cosmos DB变更源启动报错:未找到作业函数

问题解决方案

1. 解决引用冲突(你代码的核心问题)

你当前代码同时引用了进程内模型的Microsoft.Azure.WebJobs命名空间和隔离进程模型的Microsoft.Azure.Functions.Worker命名空间,两个模型的特性、绑定语法不兼容,是导致运行时无法识别函数的最直接原因,请根据你使用的运行模型二选一修改:

如果你使用进程内(In-Process)模型

删除Microsoft.Azure.Functions.Worker相关引用,将参数中的FunctionContext替换为ILogger即可,修改后代码示例:

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;

namespace ZZZ.ChangeFeedSubscriber
{
    public static class ChangeFeedSubscriber
    {
        [FunctionName("ChangeFeedSubscriber")]
        public static void Run([CosmosDBTrigger(
            databaseName: "XXX",
            collectionName: "YYY",
            ConnectionStringSetting = "XXX",
            LeaseCollectionName = "leases")] IReadOnlyList<Doc> docs, ILogger log)
        {
            if (docs != null && docs.Count > 0)
            {
                log.LogInformation("Documents modified: " + docs.Count);
                foreach (var doc in docs)
                {
                    log.LogInformation("ID: " + doc.id);
                }
            }
        }
    }
}

如果你使用隔离进程(Isolated Worker)模型

删除Microsoft.Azure.WebJobs相关引用,将[FunctionName]特性替换为[Function],同时调整CosmosDBTrigger的参数命名(隔离进程模型下参数名有变化),修改后代码示例:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;

namespace ZZZ.ChangeFeedSubscriber
{
    public static class ChangeFeedSubscriber
    {
        [Function("ChangeFeedSubscriber")]
        public static void Run([CosmosDBTrigger(
            databaseName: "XXX",
            containerName: "YYY",
            Connection = "XXX",
            LeaseContainerName = "leases")] IReadOnlyList<Doc> docs, FunctionContext context)
        {
            var logger = context.GetLogger("ChangeFeedSubscriber");
            if (docs != null && docs.Count > 0)
            {
                logger.LogInformation("Documents modified: " + docs.Count);
                foreach (var doc in docs)
                {
                    logger.LogInformation("ID: " + doc.id);
                }
            }
        }
    }
}

2. 项目配置检查

  • 确认.csproj项目文件中的AzureFunctionsVersion配置和你的模型匹配:
    • 进程内模型:值为v4
    • 隔离进程模型:值为v4-isolated
  • 确认已安装对应模型的Cosmos DB触发器NuGet包:
    • 进程内:Microsoft.Azure.WebJobs.Extensions.CosmosDB
    • 隔离进程:Microsoft.Azure.Functions.Worker.Extensions.CosmosDB

3. 本地运行配置检查

  • 确认项目根目录下存在local.settings.json文件,且Values节点下包含代码中配置的Cosmos DB连接字符串,比如你代码里写的连接字符串配置名为XXX,就需要新增"XXX": "你的Cosmos DB连接字符串"的键值对
  • 确认本地安装的Azure Function Core Tools版本和运行时版本匹配,v4运行时必须使用v4版本的Core Tools

4. 正确查看详细日志的方法

Visual Studio中配置运行参数的操作:右键项目 → 属性 → 调试 → 应用程序参数,填入start --verbose,保存后再按F5运行即可输出详细报错信息。

内容的提问来源于stack exchange,提问作者Chia-Hsuan Tsai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:09:01