2009-03-13 4 views
1

Я работаю над проектом для нового веб-приложения. Я определяю ключевые моменты функциональности, и одна вещь, о которой я, очевидно, не знаю, как подойти, выглядит следующим образом:Как создать событие на время на стороне сервера?

Один раз в минуту серверу необходимо выполнить серию вычислений по его данным и опубликовать новые полученных резюме.

Так что в сущности, мне нужен способ запуска скрипта на стороне сервера один раз в минуту, надежно, даже когда пользователи неактивны.

Я использую ASP.NET 3.5, C# для веб-интерфейса. Использование SQL 2005 для задней части данных.

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

Спасибо за любые предложения.

+0

ничего cronjob нравится на выигрышных машинах? – Tobias

ответ

1

Существует два варианта обработки «фона» на веб-сайте. Вы не могли бы сделать это как часть сайта, а скорее сделать это в службе Windows (можете использовать одни и те же бизнес-объекты все), или вы можете сделать это в фоновом потоке, запущенном в веб-приложении. Мы использовали оба успеха, разные в разных местах. В нашем Application_Start мы делаем:

//Submit background thread to update time left hospital 
System.Threading.Thread checkoutThread = 
    new System.Threading.Thread(BackgroundThread.CheckoutUpdate); 
checkoutThread.IsBackground = true; 
checkoutThread.Priority = System.Threading.ThreadPriority.BelowNormal; 
checkoutThread.Start(); 

Где BackgroundThread.CheckoutUpdate определяется как public static void CheckoutUpdate()

2

Поместите товар в кэш с истечением минуты. Убедитесь, что вы назначили ему метод обратного вызова для того, когда элемент был удален. Через минуту элемент будет удален, если вы вернетесь. Вы там делаете, затем снова добавляете элемент в кеш.

0

Получить Sql Server, чтобы сделать все это. Создайте хранимую процедуру для выполнения операции и настройте задание в Enterprise Manager -> Management -> Jobs. Скажите заданию, чтобы вызвать хранимую процедуру.

1

Не можете ли вы просто использовать System.Timers?

using System; 
using System.Timers; 
namespace App 
{ 
    class Program 
    { 
     static void TimerEvent(object s,ElpasedEventArgs arg) 
     { 
      //handle your stuff here 
     } 
     static void Main() 
     { 
      Timer t = new Timer(60000); //60 seconds * 1000 = 60.000 
      t.Elapsed += new ElapsedEventHandler(TimerEvent); 
      t.Start(); 
     } 
    } 
} 

только в случае, если вы не знаете ..

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