Ich muss eine App erstellen, die einige Informationen aus einer Datenbank einliest, die Daten verarbeitet, Änderungen zurück in die Datenbank schreibt und dann eine E-Mail mit diesen Änderungen an einige Benutzer oder Gruppen sendet. Ich werde dies in c # schreiben, und dieser Prozess muss einmal pro Woche zu einer bestimmten Zeit ausgeführt werden. Dies wird auf einem Windows 2008 Server ausgeführt.
In der Vergangenheit würde ich immer den Weg gehen, einen Windows-Dienst mit einem Timer zu erstellen und die Uhrzeit / den Tag für die Ausführung in der Datei app.config so einzustellen, dass er geändert werden kann und nur neu gestartet werden muss das Update abfangen.
Vor kurzem habe ich jedoch Blogposts gesehen, die empfehlen, eine Konsolenanwendung zu schreiben und dann eine geplante Aufgabe zu verwenden, um sie auszuführen.
Ich habe viele Beiträge gelesen, in denen ich genau zu diesem Thema gesprochen habe, aber ich habe keine definitive Antwort darüber erhalten, welcher Prozess besser ist.
Was denkt jemand von euch?
Danke für irgendwelche Gedanken.
Wenn es sich um eine Anwendung pro Woche handelt, sollten Sie die Ressourcen dafür verschwenden, dass sie für den Rest der Woche im Hintergrund ausgeführt werden.
Eine Konsolenanwendung scheint viel geeigneter.
Die typische Faustregel, die ich verwende, ist etwas in dieser Richtung. Zuerst stelle ich ein paar Fragen.
Grundsätzlich, von hier aus, wenn die Häufigkeit der Ausführung täglich oder weniger häufig ist, lehne ich mich fast immer einer geplanten Aufgabe zu. Wenn ich dann die Änderungshäufigkeit suche, werde ich mich, wenn eine große Nachfrage nach Terminplanänderungen besteht, auch an geplante Aufgaben halten, um bei Änderungen des Zeitplans Änderungen ohne Codierung zuzulassen. Schließlich, wenn es einen anderen Auslöser als die Zeit gibt, dann lehne ich mich den Windows-Diensten zu, um eine Anwendung "zukunftssicher" zu machen. Sagen Sie zum Beispiel, dass die Anforderungsänderungen jedes Mal ausgeführt werden müssen, wenn ein Benutzer eine Datei im X-Ordner ablegt.
Die Grundregel, der ich folge, ist: Wenn Sie kontinuierlich laufen müssen, weil Ereignisse von Interesse jederzeit passieren können, verwenden Sie einen Dienst (oder Daemon in UNIX).
Wenn Sie nur regelmäßig etwas tun möchten, verwenden Sie eine geplante Aufgabe (oder cron
).
Der entscheidende Punkt hier ist Ihre Phrase "must be run once a week at a particular time"
- gehen Sie für eine geplante Aufgabe.
Tags und Links .net c# windows-services scheduled-tasks