Ich plane, ein Dienstprogramm zu erstellen, das die Datenbank abfragt und einige Informationen speichert (in einer anderen Tabelle in der Datenbank). Es ist ein Multithread-Dienstprogramm und muss alle 5 oder 10 Minuten / später ausgeführt werden. Dies kann dreimal am Tag erfolgen.
Ich sehe zwei Möglichkeiten, um dies in der C # / DotNet-Programmierung zu erreichen.
- Erstellen eines Windows-Dienstes mit Timer-Ansatz.
- ein Konsolenprogramm und planen Sie es mit Windows Task Scheduler.
Welches bevorzugen Sie und warum?
Antworten:
Kommentare eines Kollegen von gestern zu diesem Thema
Jon Galloways Artikel aus dem Jahr 2005 "// TODONT: Verwenden Sie einen Windows-Dienst, um einen geplanten Prozess auszuführen" ist eine gute Lektüre. Ich schlage vor, dass die Kommentare auch gelesen werden, da die Diskussion bis heute andauert und auch einige gute Gegenargumente liefert.
Persönlich stimme ich meinem Kollegen in diesem Punkt zu. Halte es so lange wie möglich einfach. Wenn Sie auf einem Win2008-Server bereitstellen, lesen Sie den Taskplaner und alle Funktionen, die der Standardplaner bietet. Für mich bestand der Mörder darin, eine geplante Aufgabe zu starten, wenn ein Ereignis eintritt.
quelle
Dienste werden entweder zu Verwaltungszwecken oder zum Anbieten eines Dienstes für mehrere Anwendungen verwendet.
Zeitpläne werden zum mehrmaligen Ausführen einer Aufgabe verwendet, für die nicht unbedingt zusätzliche Berechtigungen erforderlich sind.
quelle
Ich habe die Argumente für die Verwendung von Windows Scheduler gehört, mich aber immer dafür entschieden, meine App als Dienst zu schreiben. Zuerst dachte ich, es wäre eine bessere Lösung in einer Clusterumgebung, aber das stimmt nicht wirklich. Das Fazit ist, dass ich keinen guten Grund hatte, außer dass es sich wie besseres Design "anfühlte".
quelle
Warum probierst du nicht Quartz.net aus?
Ich habe es einmal verwendet und kann sagen, dass es ein leistungsstarkes Framework ist, um einen eigenen Scheduler zu erstellen. Es bietet einen vorgefertigten Service, der Ihre geplanten Jobs ausführt (in der Datenbank oder nur in einer XML-Datei gespeichert) ) http://quartznet.sourceforge.net/
quelle
Wenn Sie möchten, dass der Benutzer mehr Kontrolle hat, ohne dass Sie ihn erstellen müssen, verwenden Sie den Taskplaner. Google tut dies anscheinend mit dem Update seiner Apps. Je nach Benutzer ist es nicht schwierig, die Aufgabe zu verwalten. Nehmen Sie den Benutzer aus der Schleife und erstellen Sie einen Dienst. Die meisten Menschen werden sie niemals berühren.
quelle