Настройка центра событий Azure для приема событий от ASP.NET Веб-приложение MVC

#asp.net #asp.net-mvc #azure #azure-eventhub

Вопрос:

Может ли кто-нибудь указать мне в правильном направлении, как настроить параметры сети в концентраторе событий, чтобы я мог успешно отправлять данные через ASP.NET Приложение MVC выполняется локально (localhost), а также при развертывании приложения в веб-среде разработки/контроля качества/производства azure.

Я создал консольное приложение для проверки концепции в .NET локально, а на стороне EventHub Azure добавил свой IP-адрес в настройках сети/брандмауэра, и у меня нет проблем с отправкой данных и получением данных с локальной машины.

Но когда я пробую тот же код в ASP.NET Веб-приложение MVC, страница просто зависает на CreateBatchAsync() методе и не возвращает никаких исключений..

 var producerClient = new EventHubProducerClient(connectionString, eventHubName);

EventDataBatch eventBatch = await producerClient.CreateBatchAsync();

eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("Event 1z at "   DateTime.Now.ToString())));
           
await producerClient.SendAsync(eventBatch); 
 

Любая помощь будет признательна.

Спасибо

Ответ №1:

Вызов CreateBatchAsync является первым пунктом в вашем коде для запроса сетевой операции и, следовательно, вызовет создание соединения и ссылку на службу концентраторов событий. С попыткой подключения связан тайм-аут, который составляет 60 секунд в используемой вами конфигурации по умолчанию. В зависимости от ошибки, с которой он сталкивается, вы можете увидеть повторные попытки, каждая из которых будет иметь 60-секундный тайм-аут. При конфигурации по умолчанию это будет выглядеть как 3-минутное зависание. (60 секунд * 3 попытки)

Наиболее распространенной проблемой подключения в корпоративной среде является то, что порты, необходимые для AMQP по протоколу TCP (5671/5672), не открыты. Часто помогает изменение транспорта на AMQP через WebSockets, так как он будет использовать порт 443 и при необходимости может быть перенаправлен через прокси-сервер.

Для получения дополнительных сведений может потребоваться просмотреть пример настройки клиентов концентраторов событий и руководство по устранению неполадок в сети концентраторов событий.

Комментарии:

1. Спасибо за вашу информацию, очень информативную. Но все равно не повезло, у меня нет проблем с отправкой данных в приложении для тестовой консоли. Это когда я пытаюсь запустить тот же сценарий из приложения MVC локально, используя localhost — он просто зависает на producerClient. CreateBatchAsync(); строка. Я почти уверен, что порт 443 открыт, и я использовал тип транспота AmqpWebSockets.

2. Похоже, мы, возможно, захотим начать заглядывать под обложки; Я бы рекомендовал записывать журналы ETW, создаваемые SDK, с помощью AzureEventSourceListener . образец . Наиболее интересными будут следующие идентификаторы событий: 3-5, 55-67,

3. Спасибо, Джесси, я попробую. Просто из любопытства — возможно ли вообще вызывать Концентратор событий в качестве производителя при локальном запуске кода в веб-среде, указывая при этом на ваш локальный хост ? Я только что поговорил со своим сетевым администратором, и он упомянул, что для того, чтобы это работало, мне придется каким-то образом держать порты открытыми с какой-то третьей стороной

4. Проблема была решена — Спасибо за ваш отзыв, Джесси

5. Безусловно, я пытался вызвать метод асинхронной задачи, который содержал клиент концентратора событий, из метода синхронизированного контроллера MVC. Сначала я нашел обходной путь, который позволил мне получить к нему доступ, но он просто зависал на клиенте производителя. CreateBatchAsync(); строка. Поэтому сначала я подумал, что это связано с портом. Чтобы решить эту проблему, мне пришлось преобразовать метод контроллера в метод асинхронной задачи. Еще раз спасибо.