web-dev-qa-db-fra.com

comment planifier une tâche dans MVC4 C #?

Je veux créer un système de notification sur mon site Web (un peu comme un débordement de pile)
Comment pouvons-nous planifier une tâche pour envoyer la notification par courrier électronique aux utilisateurs toutes les 24 heures?

Pouvons-nous utiliser MVC4 ou devrions-nous utiliser le service Windows?

Modifier:
Mon expérience de l’utilisation de FluentScheduler en 3 mois dans une application MVC4.
FluentScheduler est facile à configurer et à utiliser, mais il n’exécute pas de tâches à tout moment. Parfois courir et parfois ne pas courir.
Je pense que le meilleur moyen de planifier est le Windows Service afin d’assurer l’exécution d’une tâche à une heure précise.

21
Mohammad Dayyan

J'ai trouvé que c'était un ordonnanceur génial, FluentScheduler

Usage:

// Schedule an ITask to run at an interval
    Schedule<MyTask>().ToRunNow().AndEvery(2).Seconds();
16
heads5150

Vous avez besoin d'un planificateur de tâches .Net. En voici un bon: http://quartznet.sourceforge.net/

7
phnkha

Vous pouvez utiliser ATrigger service de planification. Une bibliothèque .Net est également disponible pour créer des tâches planifiées sans surcharge. Journal des erreurs, analyses, listes de tâches et plus d'avantages.

Disclaimer: Je faisais partie de l'équipe ATrigger. C'est un freeware et je n'ai aucun but commercial.

3
Kousha

peut-être que vous voulez utiliser une tâche planifiée. Faire cela dans un MVC est une mauvaise idée (mélanger les responsabilités) et créer un service Windows me semble excessif (parce que quelque chose n'a pas besoin de fonctionner tout le temps).

2
Jordi

Tout d'abord;

  1. Ajouter un package Nuget Install-Package FluentScheduler
  2. Ajoutez votre classe de registre qui hérite du registre et du code 
// Schedule a simple task to run at a specific time
Schedule(() => System.Diagnostics.Debug.Write("This is from service " + DateTime.Now.Second+"\n"))
               .ToRunNow().AndEvery(2).Seconds();
  1. Enregistrez cette classe de registre dans Application_Start of Global.asax.cs Avec TaskManager.
TaskManager.Initialize(new Test());

GitHub

1
Baqer Naqvi

J'utilise une tâche planifiée de Windows.

J'ai construit une petite application que d'entrer un enregistrement dans le BD, puis accéder au site Web avec cet ID recordId (Guid) en tant que paramètre. 

Dans MVC, je vérifie si l'ID existe, s'il existe j'exécute des tâches puis supprime l'enregistrement dans la base de données, sinon je l'ignore.

de cette façon, je suis capable d’ajouter un calendrier avec un param. sans mettre à jour l'application à chaque fois, j'ai besoin d'une nouvelle tâche planifiée. je viens d'ajouter une nouvelle tâche comme "myapp.exe/MyNewTaskName"

espérons que cela aide quelqu'un ;-)

1
Benoit

Il existe également une option intégrée, QueueBackgroundWorkItem. Il a été ajouté à .Net 4.5.2 et voici un guide pour l’utiliser dans MVC .

En plus de FluentScheduler mentionné précédemment, vous avez également HangFire . Et si vous envisagez de déployer sur Azure il existe une poignée de services différents pour cela .

0
Andreas Bergström