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

使用NamespaceManager操作Azure Service Bus时出现ConfigurationManager错误

解决Azure Service Bus中NamespaceManager引发的ConfigurationManager错误

你遇到的这个问题,核心原因是**NamespaceManager属于Azure Service Bus的旧版SDK(Microsoft.Azure.ServiceBus)**,这个类依赖传统的ConfigurationManager来读取配置,而你现在用的是.NET Core/.NET 5+的IConfiguration依赖注入模式,两者的配置读取机制不兼容,所以才会抛出相关错误。

下面给你两种解决方案,优先推荐第一种(迁移到新版SDK):


方案1:迁移到新版Azure.Messaging.ServiceBus SDK(推荐)

旧版的Microsoft.Azure.ServiceBus已经被官方弃用,新版的Azure.Messaging.ServiceBus完全适配现代.NET的开发模式,不再依赖ConfigurationManager,使用起来更顺畅。

步骤1:安装必要的NuGet包

在你的项目中安装Azure.Messaging.ServiceBus.Administration包:

Install-Package Azure.Messaging.ServiceBus.Administration
# 或者用.NET CLI
dotnet add package Azure.Messaging.ServiceBus.Administration

步骤2:修改ServiceBusPublisher类

用新版的ServiceBusAdministrationClient替代旧的NamespaceManager,代码如下:

using Azure.Messaging.ServiceBus.Administration;
using Microsoft.Extensions.Configuration;

public class ServiceBusPublisher
{
    private readonly ServiceBusAdministrationClient _adminClient;

    public ServiceBusPublisher(IConfiguration config)
    {
        var connString = config.GetSection("ServiceBus:Endpoint").Value;
        _adminClient = new ServiceBusAdministrationClient(connString);
    }

    // 新版API均为异步,建议使用异步方法符合最佳实践
    public async Task CreateQueueAsync(string queueName)
    {
        if (!await _adminClient.QueueExistsAsync(queueName))
        {
            await _adminClient.CreateQueueAsync(queueName);
        }
    }
}

说明

  • ServiceBusAdministrationClient直接通过连接字符串初始化,完美适配你现有的IConfiguration配置读取方式。
  • 异步方法需要在调用处使用await关键字,比如:
    // 在使用的地方示例
    var publisher = new ServiceBusPublisher(config);
    await publisher.CreateQueueAsync("my-queue");
    

方案2:继续使用旧版SDK(不推荐)

如果你暂时无法迁移到新版,需要做以下调整:

  1. 安装旧版SDK和ConfigurationManager依赖:
    Install-Package Microsoft.Azure.ServiceBus
    Install-Package System.Configuration.ConfigurationManager
    
  2. 确保你的配置文件(比如app.config或web.config)中包含Service Bus连接字符串的配置节(如果是.NET Core项目,还需要额外配置让ConfigurationManager能读取到):
    <configuration>
      <appSettings>
        <add key="ServiceBusConnectionString" value="你的连接字符串"/>
      </appSettings>
    </configuration>
    
  3. 修改初始化代码:
    // 注意这里使用ConfigurationManager读取配置
    var connString = ConfigurationManager.AppSettings["ServiceBusConnectionString"];
    var namespaceManager = NamespaceManager.CreateFromConnectionString(connString);
    

但再次强调,旧版SDK已经停止维护,存在安全和功能缺失的风险,强烈建议优先选择方案1迁移到新版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:31:46