Windows Scheduler API mit Konsolenanwendung Vs. .net Scheduler-Tools mit asp.net mvc, um lange laufende Prozesse in meinem asp.net MVC auszuführen

8

Ich arbeite an einer asp.net mvc-5 Webanwendung, die unter Windows 2012 & amp; Iis-8. Mein asp.net mvc hat viele CRUD-Operationen, die als Aktionsmethoden in meinem asp.net mvc implementiert sind. Aber meine asp.net mvc-Web-Anwendung wird geplanten lange laufenden Netzwerk-Scan-Prozess tun, wird der Netzwerk-Scan vor allem die folgenden Schritte: -

  1. Holen Sie sich die Liste unserer Server und vms aus unserer Datenbank.
  2. Holen Sie sich den Benutzernamen und das Passwort für die Überprüfung für jeden Server und VM von einem Drittanbieter-Tool, indem Sie die Rest-API verwenden.
  3. Rufen Sie einige Powershell-Skripte auf, um die Server & amp; vms info wie Netzwerkinfo, Speicher, Name, etc.
  4. Aktualisieren Sie unser ERP-System mit den Scan-Informationen mithilfe der Rest-API.

Nun habe ich ein Pilotprojekt mit dem folgenden Ansatz gemacht: -

  • Ich definiere eine Model-Methode innerhalb meines asp.net mvc, um die obigen 4 Schritte auszuführen.
  • Dann installiere ich das Hangfire-Tool, das die Scan-Methode auf dem vordefinierten Scheduler aufrufen wird.
  • Außerdem erstelle ich eine View in meinem asp.net mvc, die es Benutzern erlaubt, die Einstellungen für den Hangfire-Zeitplan festzulegen (dies setzt eine IIS-Zurücksetzung auf dem Host-Server voraus, um die neuen Einstellungen zu erhalten).

Jetzt führe ich einen Test-Scan für rund 150 Server durch, der ungefähr 40 Minuten in Anspruch nimmt, und es hat gut funktioniert. Die einzige Sache, die ich bemerkte, ist, dass, wenn ich den Zeitplan auf außerhalb der Geschäftszeiten (wo keine Aktivität auf IIS) ausgeführt wird, Hangfire nicht in der Lage sein wird, den Job aufzurufen, und sobald die erste Anfrage gemacht wird, werden die verpassten Jobs Lauf. Ich überwinde diese Einschränkung, indem ich eine Windows-Task definiere, die IIS alle 15 Minuten aufruft, um den Anwendungspool live zu halten, und es hat gut funktioniert ...

Nun, der andere Ansatz, über den ich lese, ist folgendes: -

  1. Anstatt die Model-Methode innerhalb von asp.net mvc zu definieren, um den Scan durchzuführen, kann ich eine separate Konsolenanwendung erstellen, um den Scan durchzuführen.
  2. Dann in meinem asp.net mvc, um eine Ansicht zu erstellen, die es Benutzern ermöglicht, eine Aufgabe innerhalb des Windows Task Schedulers zu erstellen und zu planen. Ich kann dies tun, indem ich mit der Windows-Task-Scheduler-API integriere.
  3. Wo diese Windows-Aufgabe die Konsolenanwendung aufrufen wird.

Jetzt bin ich mir nicht sicher, welcher Ansatz besser ist und warum? Im Allgemeinen sollten lang laufende / Hintergrundjobs nicht unter iis ausgeführt werden. Aber die Definition dieser lang laufenden Prozesse als Konsolenanwendung und das Aufrufen dieser Anwendungen in Windows Taskplaner werden zusätzliche Abhängigkeiten zu meiner Webanwendung erzeugen. Und wird zusätzlichen Aufwand beim Verschieben der Anwendung von verschieben Server zu einem anderen hinzufügen (zum Beispiel von Test zu Live). Abgesehen davon habe ich gelesen, dass Tools wie Hangfire, Quartz und andere dazu dienen, lange laufende Aufgaben innerhalb von IIS zu ermöglichen, und es überflüssig machen, Konsolenanwendungen zu erstellen und diese Konsolenanwendungen mit dem Taskplaner zu planen. Kann also jemand darüber beraten?

    
john G 19.02.2016, 17:03
quelle

2 Antworten

1

Meiner Meinung nach, wenn es möglich ist, das Scheduling-Problem auf der Seite der Web-Anwendung zu lösen, ist es nicht notwendig, eine Scheduler-Task oder eine neue Konsolenanwendung für Trigger-Zwecke zu erstellen. Das Problem, mit dem Sie wahrscheinlich bei der Verwendung von Planungsaufgaben in einer Webanwendung konfrontiert werden, ist allgemein üblich, wie Sie vielleicht sehen: Der Planer funktioniert beim Debuggen der Webanwendung wie ein Zauber, kann aber nach Veröffentlichung in IIS nicht ausgelöst werden. . An diesem Punkt ist das Problem in der Regel mit IIS verbunden und nicht mit den Schedulern Quartz.NET , Hangfire usw. Obwohl im Internet viele Artikel oder Lösungsmethoden veröffentlicht sind, funktionieren leider nur einige von ihnen ordnungsgemäß. Darüber hinaus erfordern die meisten von ihnen viele Konfigurationseinstellungen in der Web- und Maschinenkonfiguration.

Es gibt jedoch auch einige Lösungen für solch eine Art von Planungsproblemen und ich glaube, dass es sich lohnt, es zu versuchen. Keep Alive Service für IIS 6.0 / 7.5 . Installieren Sie es einfach auf dem Server, auf dem Sie Ihre Anwendung veröffentlichen und genießen Sie es. Dann wird Ihre veröffentlichte Anwendung nach dem Recycling des Anwendungspools, dem Neustart von IIS / Anwendungen usw. weiter bestehen. Dies wird auch in unserer MVC -Anwendung verwendet, um Benachrichtigungsmails wöchentlich zu senden und wurde monatelang problemlos bearbeitet. Hier ist der Beispielcode, den ich in unserer MVC -Anwendung verwende. Für weitere Informationen besuchen Sie bitte geplante Aufgaben in ASP.NET mit Quarz. Net und Quartz.NET CronTrigger .

>


Global.asax:

%Vor%


EmailJob.cs:

%Vor%


JobScheduler.cs:

%Vor%

Hoffe, das hilft ...

    
Murat Yıldız 25.02.2016 17:56
quelle
0
  
  • Außerdem erstelle ich eine View in meinem asp.net mvc, die es Benutzern erlaubt, die Einstellungen für den Hangfire-Zeitplan festzulegen (dies setzt eine IIS-Zurücksetzung auf dem Host-Server voraus, um die neuen Einstellungen zu erhalten).
  •   

Sie setzen Ihren Webserver zurück, um den Zeitplan einer Aufgabe zu aktualisieren? Das hört sich nicht gesund an. Sie können verfolgen, was die geplante Zeit sollte sein, und bei der Ausführung prüfen, ob die aktuelle Zeit in einem bestimmten Bereich der geplanten Zeit liegt (oder bereits ausgeführt wurde), andernfalls abbrechen der Job.

  

Das Einzige, was ich bemerkt habe, ist, dass, wenn ich den Zeitplan so konfiguriere, dass er außerhalb der Geschäftszeiten ausgeführt wird (wo keine Aktivitäten auf IIS ausgeführt werden), kann Hangfire den Job nicht aufrufen, und sobald die erste Anfrage gemacht wird verpasste Jobs werden ausgeführt. Ich überwinde diese Einschränkung, indem ich eine Windows-Task definiere, die IIS alle 15 Minuten aufruft, um den Anwendungspool live zu halten, und es hat gut funktioniert ...

Die Hangfire-Dokumentation enthält eine Seite über verzögerte Aufgaben das erwähnt, was Sie ändern müssen, um sich anzupassen.

Der Windows Taskplaner scheint keine gute Idee zu sein; Es ist nicht für die Ausführung von Ad-hoc-, kurzlebigen Aufgaben gedacht. Wahrscheinlich benötigen Sie zur Erstellung von Aufgaben eine Erhöhung, und wahrscheinlich müssen Sie eine weitere geplante Aufgabe definieren, um den Berg von Aufgaben zu bereinigen, die nach der Ausführung einiger Dutzend Hintergrundjobs existieren würden.

Sie haben auch Recht, dass die Verwendung des Windows Task Schedulers das Verschieben Ihrer Anwendung erschwert.

    
ErikHeemskerk 22.02.2016 13:03
quelle