|
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
|
|
Progress bar12.03.2019, 23:49. Показов 4766. Ответов 15
Метки нет (Все метки)
Как сделать Progress bar? Контроллер обрабатывает большое количество данных, отсылаю их по апи в 1с, хочу чтобы на странице отображался ход выполнения процесса - количество обработанных записей. Есть какие нибудь внятные примеры как это сделать?
0
|
|
| 12.03.2019, 23:49 | |
|
Ответы с готовыми решениями:
15
asp.net ajax progress bar Progress Bar, как посчитать ориентировочное время работы приложения на сервере? Можно ли переделать Progress bar в Track bar? |
|
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
|
|
| 13.03.2019, 04:19 | |
|
Pantheonptz, не надо так делать. Никогда. Контроллер ни при каких условиях не должен загружаться долгими задачами. Его задача - или выполнить действие сразу или, если не может, поставить это действие в какую-то очередь, чтобы его выполнил уже другой сервис, который не будет ограничен во времени.
Рекомендую такой подход: контроллер принимает необходимые параметры от пользователя, формирует задачу, пишет её в базу и выдаёт пользователю какой-то ID этой задачи. Саму долгую задачу пускай решает уже отдельная служба в идеале работающая вне веб-приложения (реально отдельный процесс или в виде WIndows-службы или в виде консольного приложения постоянно запущенного) или, для простоты решения (но это не правильно!) в виде отдельного потока в самом веб-приложении. JavaScript на клиенте будет периодически опрашивать веб-сервер (уже другой контроллер) на предмет статуса задачи с указанным ID и либо рисовать progress bar, если таковой статус дискретен, либо тупо отображать infinite progress, если статус "ещё не закончено". Выполнять долгие задачи в веб-приложении не надо по двум причинам: * вы занимаете поток из пула ASP.NET MVC, который мог бы обрабатывать другие запросы; * IIS полностью контролирует жизнь веб-приложения и может со спокойной совестью его грохнуть (или перезапустить) в любой момент, ибо думает, что вы понимаете, что такие приложения про быстрый "запрос-ответ", а долгие задержки в контроллерах - явно зависания;
1
|
|
|
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
|
|
| 13.03.2019, 17:17 | |
|
Wolfdp, речь не о разделении ради разделения. Приложения хостящиеся в IIS себе не хозяева. IIS их может грохнуть потому, что потому. Оттуда и рекомендация не держать в веб-приложении никаких долгоиграющих сервисов. К .NET Core это не относится)
0
|
|
|
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
|
|
| 13.03.2019, 20:01 [ТС] | |
|
Если использовать для длительной задачи Hangfire? BackgroundJob.Enqueue запускает задачу в фоне. Допустим в фоне отправляются данные, страница при этом показывает прогресс сколько записей отправлено, после завершения предоставляется ссылка на скачивание лога, что добавлено и где с ошибкой.
Вот здесь есть про прогресс бар https://www.codeproject.com/Ar... ing-Live-D но как то непонятно.
0
|
|
|
|
|||
| 13.03.2019, 20:38 | |||
|
Это очень трудозатратные операции. После отображения страницы вы должны зацепиться в контекст выполняемой задачи. Как? нереал. Можно из выполняемой задачи обновлять БД, а ваш метод будет постоянно перечитывать данные для отображения, но... это нагрузка и блокировка базы. Ваша проблема - откуда и как брать прогресс чтобы не положить остальное и отображать корректно и красиво. Вот тут и проблема, а не в том как прогресс выводить.
0
|
|||
|
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
|
|
| 13.03.2019, 21:06 [ТС] | |
|
Ну можно в статической переменной хранить количество обработанных записей и ajax-ом получать из view ее значение. а статическую переменную будет изменять фоновый процесс. Также можно ввести флаг - static bool идет ли в данный момент процесс, чтобы после перезагрузки страницы ничего не путалось.
0
|
|
|
|
||
| 13.03.2019, 21:55 | ||
|
- больше одного пользователя. Значит переменная должно быть не одна, а много... dictonary? Причём привязка по какому-то признаку, например пользователь. А если этот таск должен выполняться больше 1 раза для одного пользователя? (например, массовые аплоады запущенные с разных страниц) - упавший процесс не обновил значение переменной и ... она так и осталась true, 88% ![]() Всё.. начинаются заглушки и костыли.
0
|
||
|
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
|
|
| 13.03.2019, 22:07 [ТС] | |
|
ну тогда хранить в переменных сессии. они и пользователя идентифицируют и рано или поздно уничтожаться.
0
|
|
|
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
|
|
| 14.03.2019, 03:53 | |
|
Pantheonptz, сессия может уничтожиться раньше, чем задача закончится. У пользователя может быть несколько сессий, если, допустим, решит с разных машин зайти (почему бы и нет?). Не трогайте сессии. Если вы что-то запишете в сессию, то MVC все обращения к контроллерам, пишущим в сессию, будет обрабатывать последовательно (чтобы не было racing), а это положит производительность на лопатки. Это известная проблема.
Пишите прогресс в базу и не страдайте фигнёй. Детализировать процесс до долей процента смысла не имеет никакого от слова совсем. Либо используйте набор состояний "ещё не начато, начато, закончено", либо, если уж так хочется, то проценты с шагом в десятку. База такое выдержит играючи. Никаких блокировок тут не будет и в помине. Добавлено через 1 минуту К тому же, сессия - аспект ASP.NET MVC, а работа с 1С к этому вообще отношения не должна иметь. Получается, что вы вообще всё, что только возможно в одну кучу сваливаете (долгая работа в контроллере, сессия, импорт чего-то в 1С). Хуже и придумать нельзя.
1
|
|
|
|
||
| 14.03.2019, 08:50 | ||
|
Я работал с Hangfire. Загружали тысячи файлов. Никто не задумывался про какой-то прогресс. Очень интересно - идёшь в его админку и видишь статус "Запущен, в работе". Всё, сиди и жди. Потом открываешь, видишь что закончился и статус. Напишите на винформах загрузчик и смотрите на чудесный прогресс бар.
0
|
||
|
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
|
|
| 14.03.2019, 08:52 | |
|
HF, такой запрос для базы - ниочём даже несколько десятков раз в секунду. Это одно значение по ключу найти. Не имеет смысла вообще об этом волноваться.
0
|
|
|
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
|
|
| 14.03.2019, 09:57 | |
|
А еще , задача реализованная в отдельной службе/сервисе и т.п. может предоставлять api для мониторинга своей деятельности , по какому нибудь простенькому протокольчику. Все что останется браузеру . через это апи опрашивать службу о ее состоянии и прогрессе.
Кстати , если все же хостить отдельной задачей под IIS-ом , то можно просто хранить полученные данные в БД как и прогресс их обработки , о чем тут уже писали , таким образом даже если пулл закроется раньше времени , всегда можно по данным в БД вернуться к нужному шагу и продолжить процесс. - но это чуть более навороченная механика , избыточная для простеньких сценариев.
1
|
|
|
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
|
|
| 15.03.2019, 12:40 [ТС] | |
|
Спасибо за советы, приму к сведению. Поскольку задача у меня специфичная то думаю подход я выбрал верный. Мне нужно создать прокладку между двумя системами - по веб апи принимать данные и затем отправлять их же в другую систему. Апи в этом случае пишется для одного пользователя и вряд ли будет запускаться параллельно два и более процесса загрузки или выгрузки одновременно. В случае с загрузкой это в принципе не имеет значения т.к. данные принимаются 1 запись=1запрос, накапливаются в статическом листе и по расписанию пишутся в базу с помощью hangfire. Здесь единственная коллизия которую вижу запуск процесса записи по расписанию во время наполнения статического листа. Тут просто проверяю интервал между текущим временем и последней загрузкой записи. В плане выгрузки(под 1с имел ввиду что принимающая сторона - система 1с, выгрузка также по апи) также сделал при нажатии кнопки на выгрузку создается фоновый процесс hangfire отправляющий данные, он то и посылает с помощью signalr данные для прогресс бара, запускать одновременно несколько выгрузок теоретически возможно, но можно просто запретить это делать, так как никакой практической надобности в этом нет.
0
|
|
|
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
|
|
| 12.11.2020, 11:05 | |
|
мммда... вопрос был про progress bar, а закончили архитектурными решениями.
Яндекс выдал эту тему на запрос asp core progress bar, но тут нет ничего про прогресс бар.
0
|
|
|
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
|
|
| 12.11.2020, 11:27 | |
|
Чипс, progress bar в браузере - это джава-скриптовый компонент, в какую бы архитектуру его не пихай ...
0
|
|
| 12.11.2020, 11:27 | |
|
Помогаю со студенческими работами здесь
16
progress bar Progress Bar
progress bar Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|