App Service使用Managed Identity时Azure Service Bus连接字符串的正确格式
问题原因
该报错是由于NServiceBus的Azure Service Bus Transport组件配置规则与Azure Functions原生SDK规则不一致导致:
- Azure Functions的Service Bus绑定内置了对
Authentication=ManagedIdentity后缀的连接字符串解析逻辑,因此可以正常使用该格式 - NServiceBus的传输组件未兼容该连接字符串格式,托管身份模式下只要求传入Service Bus的完全限定命名空间,额外的认证参数会被判定为格式非法
解决方案
1. 调整连接字符串格式
直接保留Service Bus的端点地址即可,删除多余的认证参数:
"ConnectionString": "sb://MYNAMESPACE.servicebus.windows.net/"
2. 确认NServiceBus传输配置写法
如果你使用的是7.x及以上版本的NServiceBus.Azure.Transports.WindowsAzureServiceBus组件,配置示例如下:
// 直接从配置读取处理好的完全限定命名空间初始化传输 var transport = new AzureServiceBusTransport(Configuration["ConnectionString"]); // 配置托管身份凭证 transport.CustomTokenCredential(new DefaultAzureCredential()); // 注册传输到端点配置 endpointConfiguration.UseTransport(transport);
如果你使用的是6.x及更低版本的传输组件,需先升级到最新稳定版后再按上述规则配置。
3. 验证托管身份权限
需要确保App Service启用的托管身份,在你的Azure Service Bus命名空间下被分配了足够的权限:
- 基础收发需求:分配
Azure Service Bus Data Sender+Azure Service Bus Data Receiver角色 - 包含队列创建/删除等管理需求:额外分配
Azure Service Bus Data Owner角色
内容的提问来源于stack exchange,提问作者Per
相关产品推荐
相关产品推荐

