Обсуждение: работа веб-приложения после закрытия сессии. Средства и возможности?
Добрый день, на создание этой темы меня сподвигла необходимость продолжения работы приложения после завершения сессии: когда 1) вариант с увеличением session timeout - исключен, а 2) преобразование плагина на проект, с использованием технологии workflow foundation - не всегда оправдано (так как запросы могут быть - как длительными по времени выполнения, так и совсем быстрыми).
Поэтому очень интересуют возможности, средства, идеи по поводу реализации подхода, при котором возможно отвязать логику выполнения запроса от сессии по ограничению времени.
Текущая идея, точнее ее наброски:
разделение логики и верстки. Необходимо: данные авторизации и код приложения.
Есть таймер, который хранится извне приложения, и следит за временем текущей сессии.
По истечению времени - передает управление вспомогат. приложению/сервису, который принимает промежуточные результаты вычисления к тому моменту времени и продолжает выполнение следующих вычислений.
Полностью полученный результат передается верстке.
Пока есть 2 идеи для поиска решения по возможностям: 1) web-config-а; 2) iis-а, надстройки над iis.
Напрашивается очевидное решение с очередью, куда вебапп скидывает задачу, отдельным сервисом, который эту очередь разгребает и кладет результат работы в БД/хранилише/кеш. Вебапп периодически поллит результат, при наличии такового - выводит на страницу.
То есть очередь потоков будет реализована в веб-сервисе - *.asmx внутри приложения, который принимает от приложения данные, работает с очередью, и при завершении - отображает результат вычисления потока (или ссылку на конечный html)?
Не совсем так. Я представлял себе сервис, как отдельный Windows Service, работающий с некоторой очередью задач (RabbitMQ, MSMQ и т.п.). Ваше asp.net приложение создает задачу, скидывает ее в очередь и возвращает айди задачи на клиента (js скрипту) . Отдельный сервис берет задачи из очереди, производит вычисления и кладет результат в БД. JS скрипт периодически опрашивает ваше асп.нет приложение, готова ли задача с неким ID, если готова, результат берется из БД, возвращается скрипту и он отображает это на страницу.
P.S. Почитал про Hangfire - это именно то что вам нужно. По сути он и работает как отдельный сервис с воркерами и очередями - не нужно писать свой велосипед. А лицензия там LGPL можно свободно пользоваться бесплатно. Думаю, стоит попробовать.