Frage

Wir haben eine Website, auf der wir einen Planer benötigen, um Benachrichtigungen (E-Mail) zu einem bestimmten Zeitpunkt zu erhalten.z.B.Eine Person, die um 17:00 Uhr eine Erinnerung für die Teilnahme an der Besprechung um 16:45 Uhr einrichtet, erhält um 16:45 Uhr eine entsprechende E-Mail.

Da diese Site auf einem gemeinsam genutzten Server gehostet wird, haben wir keine Kontrolle über den Server, um SQL-Jobs oder Scheduler-Anwendungen auszuführen.

Gibt es irgendetwas in asp.net, das in diesem Szenario helfen kann?

War es hilfreich?

Lösung

Wie wäre es damit: einen Windows-Dienst Simulieren ASP.NET mit geplanten Aufträge ausführen .

An einem Punkt diese Technik wurde auf Stack-Überlauf verwendet, obwohl ich glaube nicht, es ist nicht mehr.

Um ehrlich zu sein, scheint es wie ein böser, fehleranfällige Hack zu mir, aber wenn Sie nicht in der Lage sind, alles auf dem Server außer Ihrer Website laufen dann so etwas wie dies ist wahrscheinlich die einzige Option.

Andere Tipps

Sie brauchen einen Job auf dem Server zu tun haben, aber Sie haben keine gute Möglichkeit, es von ASP.NET auszulösen?

Wie wäre es, eine Webseite erstellen, die Ihre Arbeit beginnen wird, und einen Timer laufen an anderer Stelle (dh. Auf einem anderen Computer), der die Seite anfordert. (Einfach die Seite schlagen Sie Aufträge auslösen)

Ich hatte das gleiche Problem wie du und ich mit der Programmierung eines Dienstes endete, dass nutzen Quartz.NET: http: //quartznet.sourceforge.net/ und auf die gleiche Datenbank wie die Website verbinden.

Mit ASP.NET Sie sind nicht garantiert, dass Ihr App jederzeit am Leben ist, und somit Webanwendungen als Host-Prozess für eine Scheduling-Lösung ist IMO nicht möglich.

Ein Windows-Dienst ist, was Sie für dieses Szenario benötigen. Sie haben die volle Kontrolle über das Starten und den Prozess sowie Möglichkeiten zur Kontrolle der Anwendung gestoppt wird.

Sind Sie in der Lage, einen solchen Dienst auf einer anderen Maschine zu hosten? Auch wenn die Web-Anwendung auf einem gehosteten Server bedeuten läuft nicht Sie den Scheduler auf dem gleichen Server laufen muß.

Wenn Sie wirklich keine Kontrolle über den Server haben (das heißt, können Sie keine SQL-Job verwenden, um eine geplante Aufgabe oder einen Windows-Server installieren), dann könnten Sie eine System.Threading.Timer , dass Sie in Ihrem Global.asax (zB beim Anwendungsstart) initialisieren, ruft ein bestimmte Methode in Ihrer Anwendung x jede Minute. Diese Methode würde dann Ihre Datenbank abfragen und sehen, welche Benachrichtigungen müssen senden werden.

Das ist wirklich kein wünschenswerter Ansatz aber, wie der Timer nicht immer gewährleistet ist, so weit berufen, wie ich weiß, da, wie Peter sagt, Ihre Web-Anwendung nicht zu allen Zeiten am Leben sein garantiert.

Allerdings, je nach Bedarf, es kann immer noch ein ‚gut genug‘ Ansatz sein, wenn Sie keine andere Optionen haben.

Wenn Sie jedoch wirklich nicht weiterkommen und keine andere Wahl haben, als es in Ihrer WebApp zu hosten,

Sie könnten versuchen, eine zu erstellen System.Timers.Timer Instanz in Ihrer Global.asax.cs-Datei.Verknüpfen Sie ein Elapsed-Ereignis wie gewohnt und geben Sie ihm Code, der etwas in der Art von tut

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

Aber wie jemand darauf hingewiesen hat, ist dies nicht garantiert, da IIS in diesem Zeitraum möglicherweise zurückgesetzt wird. In diesem Fall werden Sie es vermissen.

Es ist wirklich nicht wünschenswert zu tun, aber Sie können tun, was Razzie vorschlägt. Ich habe es viele Male getan gesehen. Obwohl hässlich, manchmal muss ya nur die hässlichen Hacks tun.

Mit dieser Methode allerdings müssen Sie Ihre Anwendung stellen Sie sicher, nicht entladen wird. Sie müssen also eine Art lebendig halten. Ich würde vorschlagen, ein Web-Monitoring-Tool einrichten, die ständig eine Seite (aspx) zieht die Anwendung am Leben zu halten. Diese Jungs sind kostenlos http://mon.itor.us/

  

Ich glaube nicht wahr, weil Quelle   Code of Quartz.Net (1.0 und 1.0.1)   lässt sich nicht kompilieren unter Visual   Studio.Net 2005 und 2008. Der einzige Weg,   zu bekommen Quartz.Net ist insgesamt zu nutzen   Spring.Net Paket, das kompiliert   Fein unter VS.Net 2005 und 2008

     

Es sei denn, Sie könnten einige Tipps teilen, wie   zu kompilieren und verwenden quartz.dll in   asp.net Projekt! (Web-Seite von   Quartz.Net und readme.txt nicht   liefern keine Informationen über Quelle   coude Kompilierung) Jeder Tipp ist   willkommen!

Ich hatte Probleme zunächst auch, aber das ist, weil die notwendige AsemblyInfo.cs in den übergeordneten Ordner enthalten ist. Außerdem müssen Sie die drei DLLs hinzufügen, die enthalten sind.

ich dich nicht glauben, weil Quellcode Quartz.Net (1.0 und 1.0.1) kompiliert nicht unter Visual Studio.Net 2005 und 2008. Der einzige Weg, Quartz.Net zu bekommen, ist ganzen Frühling zu verwenden .Net-Paket, das unter VS.Net 2005 und 2008

Fein kompiliert

Wenn Sie einige Tipps teilen können, wie kompilieren und in asp.net Projekt verwenden quartz.dll! (Web-Seite von Quartz.Net und readme.txt liefert keine Informationen über Quelle coude Kompilierung) Jeder Hinweis ist willkommen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top