Общие способы обработки длительных процессов в ASP.NET

У нас есть длительный процесс передачи данных, который представляет собой просто страницу asp.net, которая вызывается и запускается. Это может занять до пары часов. Кажется, все работает нормально, но мне просто интересно, какие есть наиболее популярные способы справиться с таким долгим процессом. Вы создаете приложение и запускаете его через планировщик Windows, веб-службу или пользовательский обработчик?


person user204588    schedule 13.08.2010    source источник


Ответы (4)


В проекте для длительных задач в веб-приложении я сделал службу Windows. всякий раз, когда пользователю приходится выполнять трудоемкую задачу, IIS отдает задачу службе, которая возвращает токен (временное имя задачи), а в фоновом режиме служба выполняет задачу. В любое время пользователь увидит статус своей задачи, которая либо находится в очереди, либо обрабатывается, либо завершена. Служба будет выполнять фиксированное количество заданий параллельно и будет поддерживать очередь для следующих входящих задач.

person inam101    schedule 26.08.2010

Служба Windows является типичным решением. Вы не хотите использовать веб-службу или пользовательский обработчик, так как оба они станут жертвами повторного использования пула приложений, что убьет ваш процесс.

person Kirk Woll    schedule 13.08.2010

Windows Workflow Foundation

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

person kbrimington    schedule 13.08.2010

Я использую два типа процессов в зависимости от потребностей моих бизнес-аналитиков. Для процессов передачи, которые запускаются по запросу и могут планироваться регулярно, я обычно пишу приложение WinForms (это личное предпочтение), которое принимает параметры командной строки, поэтому я могу планировать задание с параметрами или запускать его по требованию через интерактивное окно. Я написал о них достаточно за последние несколько лет, так что у меня есть собственная базовая универсальная оболочка, которую я использую для создания новых приложений такого рода. Для процессов, которые должны обнаруживать события (появление файлов в папках, получение вызовов CyberMation или обнаружение ловушек SNMP), я предпочитаю использовать службы Windows, чтобы они всегда были доступны. Это немного сложнее просто потому, что вы должны быть гораздо более осторожными в отношении использования памяти, утечек, повторного использования, безопасности и т. Д. Для меня приложение Windows имеет тенденцию работать быстрее при длительных заданиях, чем при выполнении процесса IIS. Я не знаю, связано ли это с тем, что он подключен к потоку IIS или его память/безопасность более ограничены. Я никогда не исследовал это.

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

person Joel Etherton    schedule 13.08.2010