Windows Service oder Windows Task Scheduler?

10

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?

Pavan GR
quelle
3
Ich denke, diese Frage ist besser geeignet für SO
Naveen
1
Wirklich, das ist eine gute Frage zum Software-Design, und Sie werden wahrscheinlich in fünf Stunden mindestens fünf gute Antworten haben, wenn Sie sie auf SO stellen.
Scharfzahn
1
Ich habe für den Abschluss gestimmt, dies gehört tatsächlich zu SO
Jaco Pretorius
2
Diese Frage löst eine subjektive und / oder erweiterte Diskussion über die Vorzüge von beiden aus. Es ist hier sehr thematisch und dort subjektiv und argumentativ.
2
Ich bin mir nicht sicher, ich denke der letzte Satz "Welchen bevorzugen Sie und warum?" würde die Close-Bots dort drüben auslösen. Es ist besser hier, da tatsächliche Antworten hier erhalten werden können
TheLQ

Antworten:

2

Kommentare eines Kollegen von gestern zu diesem Thema

"Es wird immer eine unterschiedliche Meinung zu diesem Thema geben ... Meine Faustregel wäre, wenn Sie etwas brauchen, das alle fünf Minuten läuft (und es ist Ihnen egal, wie lange es läuft oder wie lange ein Lauf dauert) oder etwas, das Reagiert auf Ereignisse, verwenden Sie einen Dienst. Wenn Sie jeden Tag etwas benötigen, das zu einer bestimmten Zeit ausgeführt werden soll, und Sie sicher sind, dass es keine Überrunde gibt, verwenden Sie den mit dem Betriebssystem gelieferten Scheduler. Wenn Sie einen Hybrid benötigen, verwenden Sie beide Lösungen für die verschiedenen Fälle oder finden Sie etwas von der Stange. (Möglicherweise Quarz .Net) "

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.

Ahmad
quelle
4

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.

Tamara Wijsman
quelle
3

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".

Walter
quelle
0

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/

Aleo
quelle
2
-1 Dies beantwortet die Frage überhaupt nicht und würde besser als Kommentar passen.
Tamara Wijsman
0

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.

JeffO
quelle