QueueExistsAsync не работает в WebApi - PullRequest
0 голосов
/ 17 июня 2019

Я успешно выполнил функцию managementClient.QueueExistsAsync(_queueName) в консольном приложении. Однако, когда я пытаюсь реализовать тот же код в WebApi, managementClient.QueueExistsAsync(_queueName) функция остается на неопределенное время.

Я хочу создать очередь службы Azure Bus на программной основе; поэтому я должен проверить, выходит ли он или нет?

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 голосов
/ 18 июня 2019

Вероятно, вы столкнулись с проблемой взаимоблокировки между вашим QueueClient и вашим контроллером WebAPI.Здесь есть отличное объяснение здесь , но, по сути, QueueClient не может вернуть данные, потому что он ожидает, пока тот же поток откроет, что WebAPI заблокирован.Консольные приложения не имеют этой проблемы, потому что у них нет ничего асинхронно работающего, кроме того, что вы укажете.

Вы должны либо синхронизировать вызовы служебной шины, либо убедиться, что все вызовы методов в стекеасинхронны, чтобы вы не попали в этот тупик.

Если вы поделитесь кодом своего контроллера, я помогу подтвердить, что это проблема, и помочь изменить ваш код для ее решения.

...