Как реализовать очень длительную фоновую задачу в приложении Asp WebAPI

Я пишу приложение WebAPI для выполнения ряда длительных задач фоновой обработки.

Я замечаю, что моя задача загрузки тестовых данных уничтожается System.Threading.ThreadAbortException, даже после того, как я отключил перезапуск пула в IIS. Я знаю, что есть способ запустить очень долго работающие (несколько часов) фоновые задачи в веб-приложении, но я просто не знаю, как именно это делается - либо какие-то специфические настройки конфигурации, метод кодирования, параметр Wen.config и т. д. Может ли кто-нибудь поделиться практическим способом сделать это, пожалуйста?


person Eugene Goldberg    schedule 16.01.2014    source источник
comment
В Azure облачная служба (рабочая роль) является наиболее надежным механизмом. В WAWS вы можете использовать SDK веб-заданий для длительных асинхронных процессов. См. asp .net/aspnet/overview/developing-apps-with-windows-azure/   -  person RickAndMSFT    schedule 23.01.2014


Ответы (2)


Вы НЕ хотите использовать IIS/ASP.Net для запуска длительного процесса, он не предназначен для этого.

Используйте его только для первоначального вызова в Web.API, чтобы запустить службу с помощью MSMQ или вставки строки в таблицу, которая сообщает вашему отдельному процессу, что делать.

Создайте отдельное приложение — либо консольное приложение, в котором вы будете использовать планировщик Windows для периодического запуска приложения и проверки наличия новых рабочих элементов; или служба Windows, которая периодически проверяет ваше хранилище рабочих элементов на наличие рабочих элементов. Затем вы можете использовать ThreadPool и т. д. для асинхронного запуска вашего процесса.

person Cam Bruce    schedule 16.01.2014
comment
Теперь с помощью веб-заданий Azure вы можете добавлять длительные процессы. См. мой учебник asp.net/aspnet/overview/developing-apps-with-windows-azure/. - person RickAndMSFT; 21.01.2014

Похоже, что лучший ответ на мою проблему — объединить собственный веб-API с реализацией службы Windows TopShelf. Таким образом, я могу написать свой код контроллера WebAPI обычным способом, и эти длительные задачи не будут уничтожены IIS.

Спасибо всем за вашу помощь!

-Евгений

person Eugene Goldberg    schedule 17.01.2014