2012-06-04 7 views
2

Очень часто мне приходится отправлять данные в и из сторонних систем учета с сайтов asp.net с использованием SQL-сервера. Импорт данных обычно занимает некоторое время, и я пытаюсь найти лучший метод для обработки долговременных задач с возможностью обновления пользователя, если они хотят видеть, как это происходит. Мои вопросы - вот некоторые из плюсов и минусов с приведенными ниже методами и что вы рекомендуете и почему?ASP.NET долго работающие задачи задачи

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

  • Использования IFrame, как предлагаемые здесь http://encosia.com/easy-incremental-status-updates-for-long-requests/: Подобно описанный выше способом, кроме этого является asynchronous.I'm не уверен, если это позволит перегрузке ASP.Net

  • Отдельного окно приложения, которые вызывает веб-службу с сайта: Я использовал этот метод, но для его настройки требуется немного больше времени и перестанет работать, когда пул приложений будет перерабатываться. Я, вероятно, не использовать этот метод

  • Windows Workflow: не использовал его, но кажется, что (особенно для небольших обновлений данных) будет перегибом

  • службы Windows: То же самое, что и выше. Кажется, что это было бы слишком сложно

  • Ajax, отдельная нить и таймер для опроса результатов кэширования: я использовал это совсем немного, но это остановится, если пул приложений будет перерабатываться, поскольку он находится в отдельном потоке, который asp .net не знает.

+3

Для WAWS вы можете использовать Azure WebJobs. См. Мой учебник http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/getting-started-with-windows-azure-webjobs. На Azure у вас всегда есть опция рабочей роли, Azure WebJobs предоставляет альтернативу WAWS без рабочей роли. – RickAndMSFT

+0

Новая страница WebJobs на портале Windows Azure Web Sites позволяет легко создавать и управлять по требованию, по расписанию или постоянно выполняющимся задачам. Дополнительная информация на [http://www.windowsazure.com/en-us/documentation/articles/web-sites-create-web-jobs/](http://www.windowsazure.com/en-us/documentation/ статьи/веб-сайты, создать-веб-задание /). – timamm

ответ

0

Это действительно вопрос о том, насколько важна эта фоновая задача, которую вы хотите выполнить, и что ее запускает. если его повторяющееся событие, которое произойдет в в известном интервале я считаю, что создание таймера на потоке приложения (global.asax) лучше, как в следующем примере:

Реализации повторяющихся фоновые задач в ASP.NET - http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

Чтобы покрыть клиентскую сторону, iframe может сделать трюк, но запрос Ajax будет немного более изящным.

до тех пор, пока вы подписываете свою задачу на HostingEnvironment.RegisterObject, утилизация пула не будет препятствовать вашей работе.

+0

Phils blog (цитируется выше) был окончательным сообщением о задачах в ASP.NET, но, по крайней мере, с WAWS, это уже не так, вы можете иметь надежные/поддерживаемые длительные процессы. См. Http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/getting-started-with-windows-azure-webjobs – RickAndMSFT

1

Если задание заняло более нескольких минут, я бы рекомендовал, чтобы задание было добавлено в базу данных, где статус задания мог быть обновлен процессом, выполняющим работу. Вы можете реализовать небольшое приложение командной строки или службу Windows (их действительно не так уж плохо, см. Writing a Useful Windows Service in .NET in Five Minutes), которая контролирует базу данных для новых заданий. Когда он находит его, он подбирает его и обновляет свой статус. Конечный пользователь может быть перенаправлен на страницу, в которой перечислены каждое задание и его прогресс. Когда задание завершено, строка базы данных обновляется, и приложение ожидает нового задания.

Смежные вопросы