Долгосрочный экспорт в Excel в службу приложений Aspnet Core 2.1 Azure - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть приложение Angular 4 с AspNetCore 2.1 Web Api на стороне сервера (для остальных служб).Приложение размещено в службе приложений Azure.Приложение имеет функцию экспорта данных в формате Excel.Ожидается, что в приложении Excel будет более 100 тыс. Строк, а время ожидания не превышает 3,8 минуты.Если запрос превышает 3,8 минуты, балансировщик нагрузки Azure отменит запрос, и пользователи часто получают сообщение об ошибке.Чтобы решить эту проблему, я решил переместить эту задачу в фоновый процесс и буду предоставлять обновления пользователю с помощью SingalR до тех пор, пока задача не будет завершена.Ход выполнения приложения будет следующим:

  1. Пользователь нажимает кнопку «Экспортировать в Excel».
  2. API AspNetCore обрабатывает этот вызов и помещает запрос в тему Azure.
  3. Функция Azure подпишется на тему Azure, как только она получит уведомление, она начнет обработку данных.Он будет извлекать данные из SQL Azure.
  4. Функция Azure будет периодически сообщать хабу SignalR о ходе выполнения задачи.Концентратор SignalR отправит уведомление клиенту.Клиент получит это уведомление, и пользователь будет знать о ходе выполнения задачи.
  5. Как только данные будут готовы, функция Azure подготовит Excel и отправит его в центр SignalR.Концентратор SignalR передает этот файл клиенту.

Я не уверен, что это правильный подход.В соответствии с microsoft docs следует избегать долго работающих функций.Кроме того, я читал, что SignalR следует избегать для отправки файлов.

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

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Обычно в подобных ситуациях мы предлагаем клиентам решение практически в реальном времени.Что вы можете сделать, чтобы решить эту проблему:

1) Нажмите кнопку, чтобы экспортировать пользовательские данные (файл Excel с 100K строк или более).

2) Уведомить пользователя, что запрос пользователя наэкспорт отправлен.

3) Также добавьте функцию кнопки обновления, которая получит статус экспорта файла.

4) Создайте веб-задание за сценой, которое обработает ваш файл и загрузитобработанный файл в хранилище Azure, может быть в BLOB-объекте.

5) Как только файл BLOB-объекта станет доступен, обновите статус до завершенного.

6) Укажите опцию с включенной ссылкой для загрузки файла, которая будетбыть URL-адресом конечной точки вашего большого двоичного объекта.

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

Если вы не хотите, чтобы кнопка Обновить была активирована дляпродолжайте проверять отчет. Вы можете использовать signalR, чтобы поддерживать соединение, и установить временную опцию, чтобы продолжать проверять ваш BLOB-файл.Как только файл станет доступен в BLOB-объекте, просто обновите метку.

Надеюсь, это поможет.

0 голосов
/ 21 февраля 2019

экспорт данных в Excel в фоновом процессе и отправка их клиенту, как только он будет готов

Вы можете попробовать использовать azure webjob для работы в фоновом режиме и непрерывно или используйте Служба пакетной службы Azure , чтобы вы могли долго выполнять экспорт данных в Excel и сохранять их в хранилище BLOB-объектов.

Когда веб-сайт работает, запускаются связанные задания.И вы можете использовать queueTrigger или httpTrigger в webjob и вызывать webjob с веб-сайта.В общем, мы должны заставить веб-сайт Azure быть всегда включенным .Перейдите в настройки приложения веб-сайта Azure и включите Always On.

И, как вы отметили: SignalR для обмена сообщениями в реальном времени, а не для загрузки файлов .Таким образом, вы можете использовать WebClient.UploadFile метод для загрузки файла на клиент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...