Azure 服务总线连接字符串验证产生错误“服务集合无法修改,因为它是只读的”

问题描述 投票:0回答:1

我正在尝试实现 Azure 服务总线连接字符串验证,如这篇文章中所示,但我随后尝试将服务总线客户端作为单例添加到服务集合中,引发了一个无效的操作异常,内容为“服务集合无法修改,因为它是只读的。”这是我的代码目前的样子:

//  Validate the configuration:
await using var testClient = new ServiceBusClient(config.ServiceBusConnectionString);
await using var testSender = testClient.CreateSender(config.QueueName);

using var batch = await testSender.CreateMessageBatchAsync().ConfigureAwait(false);

//  Add Azure Service Bus client:
services.AddSingleton(provider =>
{
    var client = new ServiceBusClient(
        config.ServiceBusConnectionString,
        new ServiceBusClientOptions
        {
            TransportType = ServiceBusTransportType.AmqpWebSockets
        });

    return client;
});

正如我引用的帖子中那样,我的目标只是确保配置的连接字符串和队列名称格式正确,并且代码能够建立连接。有没有办法可以避免我看到的错误?

编辑

堆栈跟踪,根据要求:

at Microsoft.Extensions.DependencyInjection.ServiceCollection.ThrowReadOnlyException()
   at Microsoft.Extensions.DependencyInjection.ServiceCollection.System.Collections.Generic.ICollection<Microsoft.Extensions.DependencyInjection.ServiceDescriptor>.Add(ServiceDescriptor item)
   at Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(IServiceCollection services, Type serviceType, Func`2 implementationFactory)
   at Services.Audit.AuditServiceExtension.<AddAuditService>d__0.MoveNext() in C:\Users\Dumas.DED\Projects\Services.Audit\AuditServiceExtension.cs:line 36
   at Services.Audit.AuditServiceExtension.<AddAuditService>d__0.MoveNext() in C:\Users\Dumas.DED\Projects\Services.Audit\AuditServiceExtension.cs:line 63
   at Services.Audit.AuditServiceExtension.<AddAuditService>d__0.MoveNext() in C:\Users\Dumas.DED\Projects\Services.Audit\AuditServiceExtension.cs:line 63
c# .net azure azureservicebus
1个回答
0
投票

确保您在服务总线代码中使用的

connectionstring
已分配
correct Send, Listen Permissions
。我正在使用 Root Connection String 以及我的代码中的所有权限:-

使用

Shared Access key
Service Bus Namespace
。还有
not Service Bus queue

enter image description here

我的代码与

DI
并使
ServiceBusClient
单例:-

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Azure.Messaging.ServiceBus;

class Program
{
    static async Task Main()
    {
        await RunAsync();
    }

    static async Task RunAsync()
    {
        // Setup dependency injection
        var serviceProvider = await ConfigureServicesAsync();

        // Get the ServiceBusClient from the service provider
        var serviceBusClient = serviceProvider.GetRequiredService<ServiceBusClient>();

        // Use the serviceBusClient as needed...

        // For example, creating a sender and sending a message
        await using var sender = serviceBusClient.CreateSender("myqueue");
        var message = new ServiceBusMessage("Hello, Service Bus!");
        await sender.SendMessageAsync(message);

        // The serviceBusClient doesn't need to be explicitly disposed, as it's managed by the DI container.

        // Ensure that the application does not exit immediately
        Console.ReadLine();
    }

    static async Task<IServiceProvider> ConfigureServicesAsync()
    {
        var services = new ServiceCollection();

        // Your configuration goes here (replace with actual connection string)
        var config = new { ServiceBusConnectionString = "Endpoint=sb://siliconsb67.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxx0TNmIcv+ASbDiecrE=" };

        // Validate the configuration:
        await using var testClient = new ServiceBusClient(config.ServiceBusConnectionString);
        await using var testSender = testClient.CreateSender("myqueue");

        // Add Azure Service Bus client:
        var serviceBusClient = new ServiceBusClient(
            config.ServiceBusConnectionString,
            new ServiceBusClientOptions
            {
                TransportType = ServiceBusTransportType.AmqpWebSockets
            });

        services.AddSingleton(serviceBusClient);

        // Build the service provider
        return services.BuildServiceProvider();
    }
}

输出:-

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.