Question

Quelle est la meilleure implémentation pour plusieurs services d'arrière-plan dans une application ASP.NET?

  1. Rappel de la minuterie

    Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
    
  2. Thread ou ThreadPool

    Thread thread = new Thread(Work);
    thread.IsBackground = true;
    thread.Start();
    
  3. BackgroundWorker

    BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += new DoWorkEventHandler(DoMyWork);
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); 
    worker.RunWorkerAsync();
    
  4. Mettre en cache comme http://www.codeproject.com/KB/ aspnet / ASPNETService.aspx (situé dans le publier ici )

Je dois exécuter plusieurs "services" en arrière-plan. à un moment donné. Un service peut être exécuté toutes les 5 minutes, tandis qu'un autre peut l'être une fois par jour. Ce ne sera jamais plus de 10 services à la fois.

Était-ce utile?

La solution

Eh bien, au lieu d’un "Thread simple", vous préféreriez un ThreadPool.

Et si c’était moi, je l’exécuterais dans un service Windows et je le communiquerais via MSMQ.

Autres conseils

Vous devez implémenter certains états de tâches. Après le recyclage de l'application, le service d'arrière-plan doit réparer les tâches interrompues. Si les tâches sont sous transactions, il n'y aura aucun problème avec ce comportement.

Aucune des suggestions de l'affiche originale n'est transmise à plus d'un serveur.

Je veux la même chose: Une méthode simple et robuste pour planifier des tâches d’arrière-plan régulières et effectuer un traitement lourd ad hoc (reconstruction de caches, etc.) sans affecter la demande actuelle des utilisateurs.

Je souhaite que les tâches soient exécutées dans le contexte des applications Web, pour a) obtenir la configuration de web.config (éviter la duplication de la configuration) et b) être déployée avec l'application Web (déploiement plus aisé). Et je dois le faire fonctionner pour des sites Web diffusés sur plusieurs serveurs.

Je n'ai trouvé qu'une approche qui fournit un peu ce que je veux:

(1) Créez une page .aspx pour chaque tâche et configurez une tâche planifiée wget sur un serveur distinct qui appelle ce fichier .aspx sur le site Web. J'ai implémenté cette approche et cela fonctionne, mais je ne l'aime pas à 100%, en raison de la dépendance des tâches planifiées et cela ne me permet pas d'effectuer des tâches lourdes ad hoc en arrière-plan

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top