Способ запуска длинного процесса со страницы ASP.NET - PullRequest
1 голос
/ 12 февраля 2010

Каковы ваши наиболее успешные способы выполнения длинного процесса, например, 2 часа, в asp.net и возврата информации о ходе выполнения клиенту.

Я слышал о создании службы Windows, httphandler иудаленное взаимодействие может быть успешным.

Ответы [ 4 ]

1 голос
/ 12 февраля 2010

Есть два способа, которыми я справился с этим. Во-первых, вы можете просто запустить процесс и дать клиенту истечь. У этого есть два недостатка: пользовательский интерфейс не синхронизирован, и вы связываете поток IIS для целей, отличных от HTML (я сделал это для процесса, который раньше возвращался достаточно быстро, но который выходил за пределы времени ожидания). *

Лучший способ справиться с этим - написать «Сервисное» приложение, которое обрабатывает запрос, передаваемый через таблицу базы данных (поместите туда подробности запроса). Затем вы можете создать окно, которое дает пользователю «окно» в постоянный прогресс в выполнении задачи (например, сколько записей было обработано или отправлено электронное письмо). Это окно состояния может иметь ссылку для разрешения user на обновление или вы можете автоматизировать обновление с помощью обратных вызовов Ajax по таймеру.

1 голос
/ 12 февраля 2010

Просто предложение ...

Если у вас есть логика, которую вы пытаетесь использовать уже в asp.net ... Вы можете создать внешнее приложение (служба Windows, приложение консоли и т. Д.), Которое вызывает веб-службу на вашей странице asp.net.

Например, у меня была похожая проблема, когда мне нужен был код asp.net, и мне нужно было обновить около 3000 клиентов, используя этот код. Время истекло, поэтому я раскрыл код через веб-сервис. Затем, вместо того, чтобы пытаться запустить все 3000 клиентов через asp.net одновременно, я использовал консольное приложение, которое запускается ночным заданием sql-сервера, которое запускало веб-службу один раз для каждого клиента. Таким образом, вся трудоемкая обработка выполнялась консольным приложением, которое не имеет проблемы с тайм-аутом, но код, который мы уже написали на asp.net, не нужно было создавать заново. В конце концов, небольшое изменение дизайна моей существующей архитектуры позволило мне легко обойти эту проблему.

Это действительно зависит от среды и ограничений, с которыми вам приходится иметь дело ... Надеюсь, это поможет.

0 голосов
/ 12 февраля 2010

Я очень предпочитаю службу WCF запланированным задачам. Вы могли бы (вне головы) передать addr службе WCF как своего рода «обратный вызов», который служба может вызывать с отчетами о ходе работы, когда она работает.

Я бы уклонился от запланированных заданий ... слишком конечно.

0 голосов
/ 12 февраля 2010

Это напрямую не применимо, но я написал код, который позволит вам запускать процессы, аналогичные «запланированным задачам» внутри ASP.NET, без необходимости использовать службы Windows или любые типы заданий cron.

Запланированные задачи в ASP.NET!

...