QueueExistsAsync在WebApi中不起作用

时间:2019-06-17 13:00:22

标签: c# azure azureservicebus

我已经成功在控制台应用程序中执行了managementClient.QueueExistsAsync(_queueName)函数。但是,当我尝试在WebApi中实现相同的代码时,managementClient.QueueExistsAsync(_queueName)该函数会无限期地停留。

我想以编程方式创建azure总线服务队列;因此,我必须检查它是否退出?

static async Task<IQueueClient> GetOrCreateQueue(string _serviceBusConnectionString, string _queueName)
        {
            var managementClient = new ManagementClient(_serviceBusConnectionString);
            if (!(await managementClient.QueueExistsAsync(_queueName)))
            {
                await managementClient.CreateQueueAsync(

                    new QueueDescription(_queueName)
                    {
                        LockDuration = TimeSpan.FromMinutes(5)
                    }
                );
            }

            return new QueueClient(_serviceBusConnectionString, _queueName);
        }

1 个答案:

答案 0 :(得分:0)

您可能遇到的是QueueClient和WebAPI控制器之间的死锁问题。 here有一个很好的解释,但是本质上QueueClient无法返回数据,因为它正在等待WebAPI阻塞的同一线程打开。控制台应用程序没有此问题,因为除了指定的内容外,它们没有异步运行的任何东西。

您要么需要使Service Bus调用同步化,要么确保堆栈中的所有方法调用都是异步的,以免遇到这种僵局。

如果您共享控制器代码,我将帮助确认这是问题所在,并帮助您修改代码以解决该问题。