У меня есть приложение в Asp.net MVC, где в какой-то момент я хотел бы отобразить пользователю модальное диалоговое окно, которое отображало бы индикатор прогресса выполнения процесса.
Процесс за кулисами выполняет большую часть обработки данных базы данных (на основе существующих данных он генерирует множество результирующих записей, которые также записываются обратно в базу данных). Процесс может занять от короткого момента до очень длительного времени (в зависимости от существующих данных).
Приложение будет запускать этот процесс асинхронно (через Ajax-запрос) и отображать ход выполнения таким же образом.
Проблема
Я немного читал об асинхронных контроллерах, где можно асинхронно запускать процесс и получать информацию о его завершении, но индикации прогресса нет, и я не совсем уверен, как обрабатываются тайм-ауты браузера. Что касается клиента, то асинхронный запрос аналогичен синхронному. Поэтому клиент будет ждать ответа (насколько я понимаю). главное отличие в том, что сервер будет выполнять что-то асинхронно, поэтому он не будет блокировать другие входящие запросы. Что я на самом деле должен сделать, это:
- сделать запрос, который запустит процесс и ответит, что процесс клиента запущен.
- клиент будет периодически опрашивать сервер на предмет состояния процесса, получая немедленный ответ с процентным значением (вероятно, в виде JSON)
- когда прогресс будет равен 100%, это будет означать, что он закончился, и клиент узнает, что нужно запросить результаты.
Я не уверен, что асинхронные контроллеры работают таким образом ...
Дело в том, что я не совсем уверен, что понимаю асинхронные контроллеры, следовательно, не уверен, какой подход я должен использовать, подход к этой проблеме, как только что описано? Я сам вижу две возможности:
- Asp.net MVC Асинхронные контроллеры, если они могут работать таким образом
- Приложение службы Windows, которое обрабатывает данные по запросу и сообщает о его ходе - эта служба запускается путем записи определенной записи в БД с использованием обычного действия контроллера; это запустит его, а затем служба будет записывать свой статус выполнения в БД, поэтому мое приложение Asp.net MVC сможет прочитать его по запросам опроса клиентского процесса.