.NET Core3.1升级至.NET6.0后Function App EventHub触发器报错
.NET6 Azure Function EventHub触发器升级问题解决
问题本质分析
你遇到的两个错误核心是旧版EventHubs SDK与.NET6 Azure Functions运行时不兼容,同时新环境对连接字符串的校验规则更严格:
- 第一个报错:升级后运行时不允许连接字符串中包含
EntityPath的同时,又在触发器配置里显式指定EventHub名称,两者二选一即可。 - 第二个报错:旧版
Microsoft.Azure.EventHubs系列包在.NET6环境下存在兼容性问题,导致无法正确定位EventHub实体。
解决方案步骤
1. 替换旧版EventHubs NuGet包
移除现有旧包,安装适配.NET6的新版Azure EventHubs SDK:
<!-- 移除以下旧包 --> <PackageReference Include="Microsoft.Azure.EventHubs" Version="4.3.2" /> <PackageReference Include="Microsoft.Azure.EventHubs.Processor" Version="4.1.0" /> <!-- 添加新版适配包 --> <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.EventHubs" Version="5.11.0" /> <PackageReference Include="Azure.Messaging.EventHubs" Version="5.11.1" />
注:
Microsoft.Azure.Functions.Extensions可保留,建议升级到1.3.0以适配.NET6环境。
2. 调整触发器代码与配置
触发器代码示例(兼容.NET6 In-Proc/隔离进程模式)
确保触发器的EventHubName单独配置,连接字符串不含EntityPath:
using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; public class EventHubTriggerFunction { [FunctionName("CCCCXXX")] public void Run( [EventHubTrigger("%EventHubName%", Connection = "EventHubConnectionString")] string[] events, ILogger log) { foreach (var message in events) { log.LogInformation($"处理EventHub消息: {message}"); } } }
配置文件(local.settings.json或Azure门户配置)
EventHubConnectionString:使用不带EntityPath的命名空间连接字符串,格式示例:Endpoint=sb://xxxxxxyyyyyy-02.servicebus.windows.net/;SharedAccessKeyName=xxx;SharedAccessKey=xxxEventHubName:单独配置你的EventHub实体名称(如eventhubname)
3. 验证实体存在性
确认Azure门户中,指定的命名空间xxxxxxyyyyyy-02.servicebus.windows.net下确实存在名为eventhubname的EventHub实体,检查名称拼写(区分大小写)是否完全一致。
内容的提问来源于stack exchange,提问作者Geethan Regunathan
相关产品推荐
相关产品推荐

