我已经成功在控制台应用程序中执行了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);
}
答案 0 :(得分:0)
您可能遇到的是QueueClient和WebAPI控制器之间的死锁问题。 here有一个很好的解释,但是本质上QueueClient无法返回数据,因为它正在等待WebAPI阻塞的同一线程打开。控制台应用程序没有此问题,因为除了指定的内容外,它们没有异步运行的任何东西。
您要么需要使Service Bus调用同步化,要么确保堆栈中的所有方法调用都是异步的,以免遇到这种僵局。
如果您共享控制器代码,我将帮助确认这是问题所在,并帮助您修改代码以解决该问题。