Можете ли вы запустить «службу», которая запускает запланированное задание из проекта ASP.Net? - PullRequest
5 голосов
/ 06 мая 2011

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

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

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

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

Спасибо!

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

Ответы [ 2 ]

2 голосов
/ 06 мая 2011

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

1 голос
/ 06 мая 2011

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

...