Есть ли более красивое решение для реализации такой системы?

Имеется Windows сервер и знания C#. Нужно реализовать систему, где через сайт (ASP.NET MVC) будет возможность запускать некоторые процессы(например, автоматическая отправка сообщений пользователям), которые будут длиться определённое время. Должна быть возможность отслеживать прогресс этих процессов через сайт. Каким образом это можно сделать?

Моё видение:
- процессы реализовать как консольные приложения
- запускать приложения через Process.Start() через сайт.
- для прогресса завести в базе данных таблицу для прогресса
- отображать прогресс на сайте из б.д.; Через ajax в бесконечном цикле брать данные о прогрессе.

Можно ли сделать это другим способом? Есть ли более красивые, или просто другие решения?
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C#
Если планируется использовать дотнет (как для "процессов", так и для сайта), то имеет смысл использовать преимущества платформы. Я бы поступил следующим образом:
- на ASP.NET реализовать логику сайта + бизнес-логику; здесь же - постановку "заказов" в очередь контроллера;
- отдельный процесс операционной системы - контроллер (хост) для выполняющихся "процессов"; каждый такой контроллер (их может быть несколько) загружает в отдельный домены приложения (application domain) сборку/сборки с кодом "процесса", настраивая ему права доступа к окружающей системе (песочницу); т.о., при постановки задачи в очередь конкретному контроллеру (выбирать можно рандомно или по загруженности), последний, при готовности, создает домен приложения, грузит в него нужную сборку-плагин, и запускает код на выполнение с нужными параметрами.
- код "процессов" оформлять в виде дотнетовских сборок; оформить интерфейс, который будет реализован каждой сборкой;
- прогресс можно конечно писать в БД, но можно и не писать: правильно работающий контроллер может и сам докладывать о состоянии выполнения наиболее актуальные сведения; в тот же интерфейс, через который контроллеру отдаются в очередь задачи, можно добавить и возможность запроса состояния выполнения; на клиенте брать по ajax, только конечно не в цикле, а по таймеру.
- в базу можно и нужно писать время старта/завершения задачи, результат (успех/ошибка) и т.д.;

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

Войдите, чтобы написать ответ

Похожие вопросы