2011-01-18 5 views
1

Я хочу периодически запускать событие на стороне сервера, которое должно быть инициировано сервером в сценарии ASP.NET. Запроса от клиента не будет.Периодически запускайте событие на самой стороне сервера

Ваша помощь будет очень признательна.

+0

Не могли бы вы дать оценку здесь? – Kangkan

ответ

0

Вам необходимо создать процесс, используя класс Process. Процесс будет спать до тех пор, пока не наступит время повторения.

Process p = new Process(); 
p.StartInfo.FileName = "foo"; 
p.Start(); 

Другой альтернативой является намотать нить с помощью Thread класса.

+0

Я бы не вызвал процесс из пула ASP.NET. Я слышал, что это может вызвать проблемы. – Remy

+0

@Remy Конечно, это возможно, но, с другой стороны, иногда это необходимо (это действительно зависит от того, что должен делать OP). – Sklivvz

+1

Справа. Но я думаю, важно отметить, что это не «рекомендуемый» способ. – Remy

0

Для аналогичной ситуации в некоторых приложениях я использую отдельный сервис (услуга Windows/веб-сервис) и использую System.Threading.Timer (см. http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx) и реализую собственный планировщик. Или иначе, вы можете использовать любой планировщик на основе сервера, чтобы вызвать какой-либо исполняемый файл, который, в свою очередь, попадает в вашу службу.

+0

webservice + таймер + планирование. если, скажем, мое приложение на сервере отключается, потому что в приложении нет активности. Будут ли вышеприведенные комбинации оставаться живыми, чтобы попасть в ожидающую работу? – Atif

+0

Служба Win/web не будет отключена из-за отсутствия активности. – Kangkan

1

Предполагая, что у вас есть доступ к серверу и вы можете установить внешние приложения, вы можете создать автономный Windows Service или даже консольное приложение, которое запускается встроенным Windows Task Scheduler.

Для чего-то, что работает в Asp.Net, вы можете использовать Quartz.net. This SO вопрос объясняет, как использовать его с Asp.Net

0

Я бы просто создал стандартный исполняемый файл командной строки и запустил его с помощью Windows Scheduling Tool. Служба Windows прекрасна, если она выполняется очень коротко, но, например, для задачи раз в день, я думаю, что это неправильный подход.

0

Посмотрите на Windows Workflow Foundation

Эта структура построена для такого рода вещей, как состояние Настойчивость и т.д. Он также работает по отдельности, так что процесс не будет идти вниз, когда ваше приложение (пул) идет вниз (по умолчанию из-за IIS).

Интеграция полностью с asp.net, и вы, вероятно, окажетесь (положительно) с помощью Delay Activity.

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