2009-09-15 6 views
1

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

  1. minuterie Callback

    Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000); 
    
  2. fil 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. commeCaching(situé dans Jeff Atwood post here)

je dois exécuter plusieurs arrière-plan "services" à un moment donné. Un service peut être exécuté toutes les 5 minutes où un autre peut être une fois par jour. Il ne sera jamais plus de 10 services en cours d'exécution à la fois.

Répondre

2

Eh bien, au lieu d'un 'Simple Thread', vous opteriez pour un ThreadPool.

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

+0

Service à la place également, mais si vous n'êtes pas sûr si l'utilisateur final a cette capacité par exemple dans un environnement d'hébergement partagé, je veux toujours être sûr que je peux toujours héberger ces "services". –

+0

J'ai modifié ma balise Simple Thread pour ThreadPool. J'ai également trouvé une quatrième option - http://www.codeproject.com/KB/aspnet/ASPNETService.aspx. Merci encore pour votre réponse! –

+0

Concernant cette option; Il a été porté à mon attention que cela ne fonctionnera que si quelqu'un frappe le site. Si personne ne visite, il ne peut pas supprimer l'élément du cache et exécuter la tâche. Je vérifierais par moi-même (je n'ai pas) avant de l'utiliser. Certainement Windows Services est le plus stable, s'il existe en option. –

0

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

0

Aucune des suggestions de l'auteur original n'est échelonnée sur plus d'un serveur. Je veux la même chose: Une méthode robuste et simple à utiliser pour planifier des tâches d'arrière-plan régulières et effectuer un traitement intensif ponctuel (reconstruction de caches, etc.) sans affecter la demande actuelle des utilisateurs. Je veux que les tâches s'exécutent dans le contexte des applications Web, pour obtenir a) obtenir la configuration de web.config (éviter la duplication de la configuration) et b) être déployé avec l'application web (faciliter le déploiement). Et Je dois le faire fonctionner pour les sites Web répartis sur plus d'un serveur.

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

(1) Créez une page .aspx pour chaque tâche et configurer une tâche planifiée wget sur un serveur distinct qui appelle cette .aspx sur la site Internet. J'ai mis en œuvre cette approche et cela fonctionne, mais je ne l'aime pas à 100%, à cause de la dépendance planifiée des tâches et cela ne me donne pas la possibilité d'effectuer des tâches lourdes ad hoc en arrière-plan

+1

Pour qu'un service s'exécute sur plusieurs serveurs, je vous recommande fortement de le faire dans un service Windows qui interagit avec une file d'attente de messages de type MSMQ. Ce serait votre meilleur pari. Ce que je cherchais, c'était quelque chose pour un environnement d'hébergement partagé et non pour un environnement hébergé ou hébergé virtuel. –

Questions connexes