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
相关产品推荐
相关产品推荐

