Comment faire pour exécuter une méthode en Asp.net MVC pour chaque période de 24 heures
J'ai de la méthode MVC comme
public void Sendmails()
{
//sending mails for every 24 hours.
}
Puis-je planifier au-dessus de méthode à exécuter pour chaque période de 24 heures.
Je sais que nous pouvons définir le calendrier avec l'agent sql server et planificateur de tâches de windows .
Mais en raison de certains problèmes de je veux exécuter dll en cours seulement, est-ce possible dans MVC?
Vous voudrez peut-être chercher dans cette question, stackoverflow.com/questions/12942644/...
"en raison de certains problèmes" > quels enjeux?
"en raison de certains problèmes" > quels enjeux?
OriginalL'auteur Developer | 2014-07-02
Vous devez vous connecter pour publier un commentaire.
Possible? Peut-être, avec un peu de piratage sur l'appel des tâches et des threads d'arrière-plan. Fiable? Pas le moins du monde.
Une application web est essentiellement une demande de réponse du système. L'application reçoit une demande, effectue sa logique, et renvoie une réponse. Au-delà, il est inactif. Et il est à la merci du serveur web pour être entièrement déchargé de la mémoire si le serveur web veut utiliser ou de libérer de la mémoire.
À exécuter quelque chose de temps à autre, sans interaction de l'utilisateur (qui est, sans demande de l'initier), une application web n'est pas ce que vous voulez. Au lieu de cela, vous êtes à la recherche soit d'un Service Windows ou peut-être une simple Application Console planifiée pour s'exécuter à intervalles réguliers par le système hôte du logiciel de planification (Planificateur de Tâches de Windows, cron, etc.).
Ces applications peuvent facilement partager du code, bien sûr. Ils peuvent être dans la même solution, et des références à la même classe des bibliothèques. En effet, l'application de la couche de votre code doit toujours être la plus fine et légère que possible et tout le code doit être partagée de la logique métier assemblées. N'importe quelle application (web, application, service de windows, l'application de la console, etc.) simplement référence à ceux qui sont partagés assemblées et invoquer la même logique.
En outre, de multiples applications en cours d'exécution peut également facilement partager les mêmes données. Ils peuvent à la fois se connecter à la même base de données (à l'aide de l'accès aux données partagées logique, bien sûr) et essentiellement en être autrement identiques représentations de la centralisation à la logique qui se trouve être invoquée par les différentes instances de l'application.
OriginalL'auteur David
Comme tout le monde dit que c'est pas une bonne pratique pour faire de longues exécution de processus d'arrière-plan dans votre .net application web pour la fiabilité etc.
Vous pouvez créer un de déclenchement externe qui appelle à votre MVC méthode d'action toutes les 24 heures. Donc, vous êtes à l'exécution de votre code toutes les 24 heures. Il y a de multiples façons et de services pour ce faire, j'ai utilisé de différents services. Ou vous pouvez créer votre propre si vous ne souhaitez pas utiliser de tiers.
Par exemple, vous pouvez utiliser pingdom.com compte gratuit pour appeler une url de chaque
<enter time here>
période. Ainsi, dans pingdom, vous pouvez entrer l'url de votre MVC action.Et qui sera appelée à chaque 24 heures et votre code sera exécuté dans les délais.
Mise à jour: récemment j'ai été en utilisant Azure scheduler, qui est à construire pour les scénarios de ce genre. https://azure.microsoft.com/en-us/services/scheduler/
haha, je l'ai fait exactement la même chose à l'aide de nodeping.com mais je sais à propos de QueueBackgroundWorkItem et Hangfire... maintenant... Mais ce hack a été en cours d'exécution pendant des années toutes les 3 minutes comme un charme (plus de 99%) plus de 3 ans maintenant. Un jour je vais le faire juste. Et quand il ne parvient pas à remplir dans un temps opportun nodeping m'envoie une page et un e-mail. 😀 juste ce prodigieux "faire fonctionner, à 10 minutes hack" qui a tout simplement jamais été revisitée.
OriginalL'auteur MoXplod
son Bon Travail
OriginalL'auteur Hooman Hoseinzade
Cela sonne comme une excellente affaire pour Revalee. Revalee est un projet open-source qui a été développé pour gérer ce type de situation. Il gère les tâches de la persistance et de la programmation à l'aide d'un Service Windows, mais tire parti d'une application web pour gérer le travail de traitement. Dans votre cas, vous devez planifier votre
SendEmail
action " une fois toutes les 24 heures par le biais du Service.Suivant est le flux de travail d'une application web qui utilise Revalee:
Revalee de Flux de travail http://revalee.sageanalytic.com/Images/workflow.png
Avertissement: je suis l'un des développeurs impliqués avec le Revalee projet. Pour être clair, cependant, Revalee est gratuit, open source logiciel. Le code source est disponible sur GitHub.
Le Revalee Service peut être installé sur n'importe quel serveur Windows, y compris le serveur d'hébergement web. Nous avons eu des cas où un utilisateur n'a pas de contrôle sur le serveur web, mais n'a le contrôle d'un autre serveur (comme un serveur de courrier électronique) et, par conséquent, a été en mesure d'utiliser Revalee sur que les "autres" serveur avec succès.
Mais nous avons d'autres choix, comme le planificateur de Tâches de Windows avec les mêmes fonctionnalités sans aucun code complexe, quelle est la différence ? J'ai besoin qu'il doit exécuter dans le site web hébergé par elle-même sans aucune présence de windows
OriginalL'auteur László Koller
Je suis d'accord avec @David, l'exécution de tâches en arrière-plan dans l'application web est intrinsèquement pas fiable, mais il y a des situations où cela fait sens. Je vous recommande la lecture de cet excellent article premier, http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/
Avec .NET 4.5.2, vous pouvez tirer parti de HostingEnvironment, comme l'explique bien cet article: http://blog.mariusschulz.com/2014/05/07/scheduling-background-jobs-from-an-asp-net-application-in-net-4-5-2 Citant que "Le HostingEnvironment.QueueBackgroundWorkItem méthode permet de planifier la petite arrière-plan des éléments de travail. ASP.NET les pistes de ces éléments et l'empêche de IIS à partir terminant abruptement le processus de travail jusqu'à ce que toutes les tâches en arrière-plan les éléments ont terminé."
Mais encore une fois, ce n'est pas une bonne pratique si elle est utilisée, elle doit être utilisée à très bon escient.
OriginalL'auteur Robert Goldwein
Ici est un simple tutoriel pour envoyer des courriels à partir de windows service. Vous pouvez utiliser la même base de données...etc.
http://www.codeproject.com/Tips/704008/Send-Auto-Notification-Using-Windows-Service
OriginalL'auteur Stefdelec