Можно ли запустить службу, которая запускает запланированную задачу из проекта ASP.Net?

Я создал службу Windows для нашего клиента, которая собирает все измененные/новые строки из базы данных, превращает их в CSV-файл, а FTP загружает их куда-то каждую ночь. Теперь, как выясняется, у них нет доступа для установки или запуска службы Windows (это решение, размещенное только в Интернете).

Я думал, что будет достаточно просто изменить код службы Windows для запуска внутри процесса ASP.Net и создания экземпляра из Global.asax (я делал это в прошлом, размещая службу WCF из проекта MVC). Мы используем ASP.Net 4.0, используем веб-формы, и эта задача запускает Quartz и OpenPG каждую ночь в полночь (или другое настроенное время).

Мой босс был обеспокоен тем, что процесс хостинга засыпает или выгружается в течение длительных периодов времени, когда никто не заходит на сайт. Я почти уверен, что этого не происходит, но я не знаю с абсолютной уверенностью.

Будет ли это работать так, как я думаю, или возникнут проблемы с реализацией этого способа?

Спасибо!

Изменить: я знаю, что вы «можете» (создать объект и вызвать метод, который не блокирует выполнение Application_Start, который запускает таймер или фоновый поток или что-то еще и запускает код в фоновом режиме), но это хорошая идея и будет ли Хостинг-процесс ASP.Net засыпает/убивает поток, в котором он работает? Если да, могу ли я создать новый поток (либо создать свой собственный поток, либо использовать его из пула) и запустить его бесконечно, не убивая?


person Community    schedule 05.05.2011    source источник


Ответы (2)


По умолчанию IIS отключает бездействующий процесс. Однако вы можете изменить это, но вы все равно столкнетесь с риском того, что веб-процесс не может быть гарантированно запущен. Настройка рабочего процесса должна каким-то образом поддерживать его работу.

person Simon Halsey    schedule 05.05.2011

Используйте планировщик заданий Windows... это прекрасный пример того, для чего он нужен. Вы можете сделать так, чтобы он вызывал вашу сборку напрямую, или вы можете просто использовать его для вызова конечной точки WCF на своем веб-сайте.

person DancesWithBamboo    schedule 06.05.2011
comment
У клиента есть только веб-решение, ни ВМ, ни рабочий стол, ничего. Если бы у нас был доступ к планировщику задач, у нас, вероятно, был бы доступ к установке службы Windows. - person ; 06.05.2011
comment
Похоже, вам нужен другой хостинг-провайдер? Насколько вы контролируете базу данных? Можете ли вы запланировать задание в базе данных, чтобы сделать это? - person DancesWithBamboo; 06.05.2011
comment
Мы профессиональный магазин, мы явно бы не выбрали такой подход, но клиент решил сам получить хост у какого-то хостинг-провайдера. Так что нет. - person ; 06.05.2011