Question

Nous avons un site Web où nous avons besoin d'un planificateur pour recevoir des notifications (e-mail) à temps spécifique. par exemple. une personne mise en rappel à 17 heures pour assister à la réunion à 16h45, recevra courriel à 16:45 au sujet même.

Comme ce site est hébergé sur le serveur partagé, nous n'avons aucun contrôle sur le serveur pour exécuter toute application d'emploi SQL ou planificateur.

Y at-il quelque chose dans asp.net qui peut aider dans ce scénario?

Était-ce utile?

La solution

Que diriez-vous ceci: Simuler un service Windows en utilisant ASP.NET pour exécuter des tâches planifiées .

À un certain moment cette technique a été utilisée sur débordement de pile , bien que je ne pense pas que ce soit plus.

Pour être honnête, il semble comme un méchant, bidouille sujette à erreur pour moi, mais si vous ne parvenez pas à exécuter quoi que ce soit sur le serveur, sauf votre site Web, quelque chose comme ceci est probablement votre seule option.

Autres conseils

Vous devez avoir un travail fait sur le serveur, mais vous avez pas de bonne façon de déclencher à partir de ASP.NET?

Comment sur la création d'une page Web qui va commencer votre travail, et une course de minuterie ailleurs (ie. Sur un autre ordinateur) qui demande cette page. (Il suffit de frapper la page pour déclencher vous emplois)

J'ai eu le même problème que vous et j'ai fini avec la programmation d'un service qui utilisent Quartz.NET: http: //quartznet.sourceforge.net/ et se connecter à la même base de données que le site Web.

Avec ASP.NET vous n'êtes pas garanti que votre application est en vie à tout moment, et les applications Web ainsi que d'un processus hôte pour une solution de planification est impossible de l'OMI.

Un service Windows est ce que vous avez besoin pour ce scénario. Vous avez le plein contrôle sur le démarrage et l'arrêt du processus ainsi que les moyens de contrôle de l'application.

Êtes-vous capable d'accueillir un tel service sur une autre machine? Même si l'application Web est en cours d'exécution sur un serveur hébergé ne signifie pas que vous devez exécuter le planificateur sur le même serveur.

Si vous avez vraiment aucun contrôle sur le serveur (ce qui signifie, vous ne pouvez pas utiliser un travail sql, une tâche planifiée ou installer un serveur Windows), vous pouvez utiliser un System.Threading.Timer que vous initialisez dans votre Global.asax (par exemple, au démarrage de l'application) qui invoque une certaine méthode dans votre application toutes les x minutes. Cette méthode serait alors interroger votre base de données et voir ce que les notifications doivent être envoyer.

Ceci est vraiment pas une approche souhaitable cependant, que la minuterie n'est pas garanti pour appeler toujours autant que je sache, puisque, comme le dit Peter, votre application web n'est pas garanti d'être en vie à tout moment.

Toutefois, en fonction de vos besoins, il peut encore être une approche « assez bonne » si vous avez pas d'autres options.

Toutefois, si vous êtes vraiment complètement coincé et ne pas avoir d'autre choix que d'accueillir dans votre WebApp,

Vous pouvez envisager la création d'une instance de System.Timers.Timer dans votre fichier Global.asax.cs. Câbler un événement Elapsed comme vous le feriez normalement, et lui donner un code qui fait quelque chose le long des lignes de

protected void myTimer_Elapsed(object sender, EventArgs e)
{
    if(System.DateTime.Now Falls in Some Configured Time-Window)
        //Do Stuff
}

Mais comme quelqu'un l'a souligné, ce ne est pas garanti que IIS peut être remise à zéro durant cette période, dans ce cas, vous manquez.

Il est vraiment pas souhaitable de le faire, mais vous pouvez faire ce que Razzie suggère. Je l'ai vu faire plusieurs fois. Bien que laid, parfois ya simplement faire les hacks laids.

En utilisant cette méthode cependant, vous devez vous assurer que vous application n'est pas déchargé. Donc, vous avez besoin d'une sorte de garder en vie. Je suggère la mise en place d'un outil de surveillance Web qui sera constamment tirer une page (ASPX) pour maintenir l'application en vie. Ces gars-là sont libres http://mon.itor.us/

  

Je ne vous belive, parce que la source   code de Quartz.Net (1.0 et 1.0.1)   ne compile pas sous Visual   Studio.Net 2005 et 2008. La seule façon   pour obtenir Quartz.Net est d'utiliser toute   Spring.Net paquet, qui compile   amende en vertu VS.Net 2005 et 2008

     

Sauf si vous pouvez partager quelques conseils, comment   pour compiler et utiliser en Quartz.dll   projet asp.net! (Page web   Quartz.Net et ne pas readme.txt   fournir des informations sur la source   compilation Coudé) Chaque conseil est   accueilli!

J'ai eu du mal au début aussi, mais c'est parce que le AsemblyInfo.cs est contenu nécessaire dans le dossier parent. En outre, vous aurez besoin d'ajouter les trois DLL qui sont inclus.

Je ne vous belive, parce que le code source de Quartz.Net (1.0 et 1.0.1) ne compile pas sous Visual Studio.Net 2005 et 2008. La seule façon d'obtenir Quartz.Net est d'utiliser Spring toute package .Net, qui compile très bien sous VS.Net 2005 et 2008

Sauf si vous pouvez partager quelques conseils, comment compiler et utiliser Quartz.dll dans le projet asp.net! (Page web de Quartz.Net et readme.txt ne fournit aucune information sur la source de compilation Coudé) Chaque conseil est la bienvenue!

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