.net веб-сайт BackgroundWorker. Это хорошая идея? - PullRequest
0 голосов
/ 05 октября 2009

Я планирую использовать BackgroundWorker на своем сайте .net для выполнения обслуживания базы данных каждую ночь в 12:00. Является ли хорошей идеей иметь время мониторинга асинхронного процесса и выполнять действия? Я использую SQL Server Express Edition, поэтому я не могу использовать какие-либо планирования на стороне базы данных. Я также не хочу использовать планировщик задач Windows

Ответы [ 4 ]

7 голосов
/ 05 октября 2009

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

В противном случае я бы предложил использовать службу Windows и таймер (System.Timers.Timer или System.Threading.Timer). Вам нужно будет рассмотреть возможность перехода на летнее время и тому подобное - вот одна из причин использовать встроенный планировщик.

Я не предположил бы, что вы сделаете эту часть сайта ASP.NET. Это слишком сложно (IMO), чтобы думать обо всех ключевых случаях утилизации AppDomain и т. Д.

2 голосов
/ 05 октября 2009

Кстати, вы вообще не можете планировать работу с использованием среды выполнения ASP.NET, нет API, который бы позволял вам это делать.Среда выполнения ASP.NET является реактивной службой;он реагирует на запрос HTTP, подает ответ, а затем фактически спит до следующего запроса.Он также оставляет за собой право создавать и уничтожать домены приложений и объекты в любое время для выполнения своих обязательств по ограничению памяти.

На ваш выбор:

  • Планировщик Windows
  • SQLПланировщик сервера
  • Пользовательская служба Windows (которая эффективно эмулирует планировщик Windows, так что нет особого смысла)

Если все эти опции вам запрещены, то, боюсь, выповезло.К сожалению.

1 голос
/ 05 октября 2009

Нет. Используйте запланированное задание.

0 голосов
/ 05 октября 2009

По моему опыту, попытки делать подобные вещи из веб-приложения крайне ненадежны.

Веб-серверы более склонны к сбросу, чем другие серверы по разным причинам. Вы обнаружите, что запланированные задачи (даже простые пакетные файлы, которые запускают сценарии SQL, или библиотеки DLL, которые выполняют управляемый или неуправляемый код) гораздо более надежны. Кроме того, как указал Джон, планирование их и возможность доверять тому, что они выполнялись, когда вы этого хотите, - совсем несложно, и у вас гораздо более высокая степень доверия к механизму планирования, потому что вам не нужно его создавать, протестируйте его и разверните самостоятельно.

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

...