2009-03-13 7 views
1

Je travaille sur un projet pour une nouvelle application web. J'identifie les points clés de la fonctionnalité, et une chose que je ne sais pas clairement comment aborder est la suivante:Comment créer un événement temporisé côté serveur?

Une fois par minute, le serveur doit exécuter une série de calcs sur ses données, et poster de nouvelles résumés dérivés. Donc, ce dont j'ai besoin, c'est d'un moyen d'exécuter un script côté serveur une fois par minute, de manière fiable, même lorsque les utilisateurs ne sont pas actifs.

J'utilise ASP.NET 3.5, C# pour l'interface web. Utilisation de SQL 2005 pour le backend de données.

Je suppose que toutes les données qui sont changées sont du côté SQL, donc le script pourrait fonctionner complètement là si c'est plus faisable.

Merci pour vos suggestions.

+0

rien cronjob comme sur les machines à gagner? – Tobias

Répondre

1

Il y a deux options pour le traitement « de fond » sur un site Web. Vous ne pouvez pas le faire en tant que partie du site, mais plutôt le faire dans un service Windows (vous pouvez utiliser les mêmes objets métier et tout) ou vous pouvez le faire dans un thread d'arrière-plan démarré dans l'application web. Nous avons utilisé les deux avec succès, différents dans des endroits différents. Dans notre Application_Start nous:

//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(); 

Où BackgroundThread.CheckoutUpdate est défini comme public static void CheckoutUpdate()

2

Placez un élément dans le cache avec une expiration de minutes. Assurez-vous de lui affecter une méthode de rappel lorsque l'élément est supprimé. Après une minute, l'article est retiré, votre rappel fonctionne. Avez-vous des choses là-bas, puis ajouter à nouveau l'élément dans le cache.

0

Get Sql Server pour tout faire. Créez une procédure stockée pour effectuer l'opération et configurez un travail dans Enterprise Manager -> Management -> Jobs. Dites au travail d'appeler la procédure stockée. Vous ne pouvez pas simplement utiliser System.Timers?

1

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(); 
     } 
    } 
} 

juste au cas où vous ne saviez pas ..

Questions connexes