#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(); строка. Поэтому сначала я подумал, что это связано с портом. Чтобы решить эту проблему, мне пришлось преобразовать метод контроллера в метод асинхронной задачи. Еще раз спасибо.