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

