使用 Azure.Messaging.ServiceBus.Administration 创建 ServiceBus 队列时出错

Error when creating ServiceBus Queue using Azure.Messaging.ServiceBus.Administration

我正在(尝试)使用此代码创建 ServiceBus 队列:

using Azure.Messaging.ServiceBus;
using Azure.Messaging.ServiceBus.Administration;
...
class blabla
{
   private string connectionString = "Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXYYY";
   private string queueName = "testqueue";
   ...
   public doit()
   {
    var adminClient = new ServiceBusAdministrationClient(connectionString);
    bool queueExists = adminClient.QueueExistsAsync(queueName).Result;
    if (!queueExists)
    {
        var options = new CreateQueueOptions(queueName)
        {
            DefaultMessageTimeToLive = TimeSpan.FromDays(2),
            LockDuration = TimeSpan.FromSeconds(45),
            MaxDeliveryCount = 8,
            MaxSizeInMegabytes = 2048
        };
        options.AuthorizationRules.Add(new SharedAccessAuthorizationRule(
            "allClaims",
            new[] { AccessRights.Manage, AccessRights.Send, AccessRights.Listen }));
        QueueProperties createdQueue = adminClient.CreateQueueAsync(options).Result;
    }

   }
}

但不断出现此错误:

System.AggregateException: One or more errors occurred. (SubCode=40900. Conflict. You're requesting an operation that isn't allowed in the resource's current state. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:bc79fd98-73c8-4301-b6b9-05d0eae6ed6a_G17, SystemTracker:xxx.servicebus.windows.net:yyy, Timestamp:2021-05-09T00:24:57
Status: 409 (Conflict)
ErrorCode: 40900

使用来自 Microsoft.ServiceBusNamespaceManager 的旧 (NET) 方式没有问题。

  var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
  if (!namespaceManager.QueueExists(queueName))
  {
     namespaceManager.CreateQueue(queueName);
  }

所以,有人知道我在这里做错了什么吗? *

以下是更新后的工作代码,您需要确保您拥有具有完全访问权限的共享访问策略。

using Azure.Messaging.ServiceBus.Administration;
using System;
using System.Threading.Tasks;

namespace ServiceBusDemo
{
    class Program
    {
        private static string connectionString = "Endpoint=sb://ns-servicebusshu.servicebus.windows.net/;SharedAccessKeyName=fullAccess;SharedAccessKey=oB+IsK8Aqp0/xfXnF9HCz6x9pqPIOysTXaJofSmHEYs=";
        private static string queueName = "testqueue";

        async static Task Main(string[] args)
        {
            await doit();
        }
       
        public static async Task doit()
        {
            var adminClient = new ServiceBusAdministrationClient(connectionString);
            bool queueExists = await adminClient.QueueExistsAsync(queueName);

            if (!queueExists)
            {
                var options = new CreateQueueOptions(queueName)
                {
                    DefaultMessageTimeToLive = TimeSpan.FromDays(2),
                    LockDuration = TimeSpan.FromSeconds(45),
                    MaxDeliveryCount = 8,
                    MaxSizeInMegabytes = 2048
                };
                options.AuthorizationRules.Add(new SharedAccessAuthorizationRule("allClaims", new[] { AccessRights.Manage, AccessRights.Send, AccessRights.Listen }));

                QueueProperties createdQueue = await adminClient.CreateQueueAsync(options);
            }

        }
    }
}

一旦您 运行 应用程序成功创建了如下队列:

抱歉造成混淆。 我的代码(还有 Rahul Shukla)现在可以工作了 (???)。 我必须创建一些具有完全访问权限的新共享访问策略 (???)。 第三个创建开始工作(??)。 我创建的前 2 个仍然无法正常工作(????)。 创建的 3 个策略之间没有差异。因此,我的回答中有问号。 在 MS NET SB 论坛上发布了关于 3 个策略中有 1 个有效的问题。到目前为止没有answer/acknowledgment。