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

.NET微服务应用中连接字符串返回空值的问题求助

.NET WebAssembly应用中Azure ServiceBus连接字符串为空的排查与解决

问题现象

Chrome中抛出异常:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: The argument namespaceConnectionString is null or white space. (Parameter 'namespaceConnectionString')

调试确认_config.GetConnectionString("AzureServiceBus")返回空值,项目配置文件Appsettings.json已配置对应节点,但服务类无法读取到连接字符串。

相关配置与代码

Appsettings.json配置:

{
  "ConnectionStrings": {
    "AzureServiceBus": "Endpoint=sb://abduservicebus.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=RandomChars="
  }
}

QueueService核心代码:

using Microsoft.Extensions.Configuration;
using Microsoft.Azure.ServiceBus;
using System.Text;
using System.Text.Json;

namespace SBSender.Services
{
    public class QueueService : IQueueService
    {
        private readonly IConfiguration _config;
        public QueueService(IConfiguration config)
        {
            _config = config;
        }
        public async Task SendMessageAsync<T>(T serviceBusMessage, string queueName)
        {
            var queueClient = new QueueClient(_config.GetConnectionString("AzureServiceBus"), queueName);
            string messageBody = JsonSerializer.Serialize(serviceBusMessage);
            Message message = new Message(Encoding.UTF8.GetBytes(messageBody));

            await queueClient.SendAsync(message);
        }
    }
}

Program.cs代码:

using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using SBSender;
using SBSender.Services;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddTransient<IQueueService, QueueService>();

await builder.Build().RunAsync();

排查与解决步骤

  • 检查配置文件属性:右键Appsettings.json文件→属性,将「复制到输出目录」设置为「如果较新则复制」或「始终复制」。WebAssembly项目中配置文件需被复制到输出目录才能被运行时读取。
  • 验证配置读取路径:替换GetConnectionString方式,直接通过键路径读取验证:
    var connectionString = _config["ConnectionStrings:AzureServiceBus"];
    
    若该方式能获取到值,说明GetConnectionString匹配异常,可直接使用此方式读取。
  • 排查环境配置覆盖:如果存在appsettings.Development.json等环境特定配置文件,确认其中未清空或覆盖ConnectionStrings节点。
  • 显式加载配置文件:在Program.cs中显式指定加载配置文件,确保配置被正确加载:
    builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    
  • 迁移至新版SDK:当前使用的Microsoft.Azure.ServiceBus为旧版SDK,建议替换为Azure.Messaging.ServiceBus,新版API更稳定且配置读取逻辑更可靠,示例代码如下:
    using Azure.Messaging.ServiceBus;
    using Microsoft.Extensions.Configuration;
    using System.Text.Json;
    
    namespace SBSender.Services
    {
        public class QueueService : IQueueService
        {
            private readonly IConfiguration _config;
            public QueueService(IConfiguration config)
            {
                _config = config;
            }
            public async Task SendMessageAsync<T>(T serviceBusMessage, string queueName)
            {
                var connectionString = _config.GetConnectionString("AzureServiceBus");
                await using var client = new ServiceBusClient(connectionString);
                ServiceBusSender sender = client.CreateSender(queueName);
                
                string messageBody = JsonSerializer.Serialize(serviceBusMessage);
                var message = new ServiceBusMessage(messageBody);
                
                await sender.SendMessageAsync(message);
            }
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:06:17