Azure.Messaging.ServiceBus.ServiceBusClient 的连接字符串

Connection string for Azure.Messaging.ServiceBus.ServiceBusClient

我正在尝试开始使用 Azure ServiceBus,但文档之神反对我。我正在关注 this MS article,它说此代码将允许我发送消息...

public class Program 
{
    static string connectionString = "<NAMESPACE CONNECTION STRING>";
    
    static string queueName = "<QUEUE NAME>";

    static async Task Main(string[] args) 
    {
        await SendMessageAsync();
    }

    static async Task SendMessageAsync() 
    {
        // create a Service Bus client 
        ServiceBusClient client = new ServiceBusClient(connectionString);

        // create a sender for the queue 
        ServiceBusSender sender = client.CreateSender(queueName);

        // create a message that we can send
        ServiceBusMessage message = new ServiceBusMessage("Hello world!");

        // send the message
        await sender.SendMessageAsync(message);
        
        Console.WriteLine($"Sent a single message to the queue: {queueName}");
    }
}

我为 2 个常量、来自门户的连接字符串和队列名称分配了值,但是当我编译和 运行 它无法在线实例化 ServiceBusClient ...

System.ArgumentException HResult=0x80070057 Message=The connection string used for an Service Bus client must specify the Service Bus namespace host and either a Shared Access Key (both the name and value) OR a Shared Access Signature to be valid. (Parameter 'connectionString') Source=Azure.Messaging.ServiceBus

进一步挖掘,我发现短语“FullyQualifiedNamespace”被用于连接字符串,所以我用 MyServiceBusName.queue.core.windows.net 和 运行 替换了我的值。结果不同但不好...

System.FormatException HResult=0x80131537 Message=The connection string could not be parsed; either it was malformed or contains no well-known tokens. Source=Azure.Messaging.ServiceBus

我猜测,从第一次尝试开始,就有一种方法可以将 SAS 令牌或共享访问密钥作为连接字符串的一部分,但我只是想不出具体方法。

我试过只添加共享访问密钥 (SAK)

static string connectionString = 
   "MyServiceBusName.queue.core.windows.net;AccountKey=accountKeyValue

没有快乐,如果我不包括 SAK 的“名称”元素,也是如此。

同样,我尝试添加门户网站给我的 SAS 令牌,但仍然没有任何乐趣。

可以某人请告诉我我没有做我应该做的事情,拜托

更新:

更多挖掘表明进行以下更改应该工作...

ServiceBusClient client = 
    new ServiceBusClient(connectionString, new DefaultCredentials())    

我的连接字符串刚设置为 MyServiceBusName.queue.core.windows.net 和修改后的构造函数,它实例化 ServiceBusClient OK,但随后挂起,最终在尝试实际发送消息时超时。

队列似乎工作正常,因为我可以在门户中添加消息并在我的计算机上使用的存储资源管理器实例中查看它们。同样,我可以在存储资源管理器中创建消息并在门户中查看它们。

这是为服务总线命名空间指定连接字符串的方式:

Endpoint=sb://namespacename.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=yZOy10HAJTNkyaKOqwjSricOEud7QLK7R62KyVfjCt4=

您可以通过进入 Shared Access Policy > RootManageSharedAccessKey > Primary (or Secondary) Connection String 为您的服务总线命名空间从 Azure 门户获取此信息。

更新

您似乎正在尝试使用作为 Azure 存储一部分的存储队列。如果是这样,那么您的连接字符串将是:

DefaultEndpointsProtocol=https;AccountName=accountname;AccountKey=xxxx==;EndpointSuffix=core.windows.net;

请注意,您不能使用 Azure.Messaging.ServiceBus 包来管理您的存储队列。您将需要使用 Azure.Storage.Queues 包。