2017-04-27 3 views
0

Ich arbeite an Windows-Anwendung, die in VB.NET entwickelt wird. Diese Anwendung enthält mehrere analytische Tests. Wenn ein Benutzer auf einen bestimmten Test klickt, werden verschlüsselte SQL-Abfragen ausgeführt, und die entsprechende Ausgabe wurde in Excel eingefügt.So implementieren Sie Scheduler mit Windows Form Application in VB.Net

Jetzt besteht die Anforderung darin, diese Aufgabe automatisch zu planen, wobei der Benutzer Datum und Uhrzeit angibt und zu diesem bestimmten Zeitpunkt den Test ausführen soll. Auch SQL-Abfragen werden aus Sicherheitsgründen in einem verschlüsselten Format gespeichert, sodass ich SSIS-Paket- oder SQL-Jobagenten nicht zum Planen der Aufgaben verwenden kann.

Welche möglichen Ansätze/Workarounds können in diesem speziellen Szenario zur Implementierung von Scheduler für .NET Windows Application verwendet werden?

+0

Konnten Sie eine einfache Konsolenanwendung erstellen, die Ihre Behandlung durchführt, und sie dann durch den eigenen Scheduler von Windows ausführen? – Gimly

+0

Ich stimme mit Gimly überein, wo Batch-Prozesse oder tägliche Aufgaben am besten durchgeführt werden müssen, um diese Tests oder Berichte als verschiedene ausführbare Konsolen-Anwendungen zu haben. Dann erstellen Sie einfach eine Task im Windows Task Scheduler –

+0

Wir verwenden [Quartz Scheduler] (https://www.quartz-scheduler.net/) wo Windows geplanten Aufgaben nicht tun. –

Antwort

0

Ok, ich werde versuchen, den von uns verwendeten Ansatz zu erklären. Wir haben eine Web-UI, eine Datenbank und 2 Windows-Dienste, eine, die verwendet wird, um die Zeitplaninformationen zu aktualisieren, und eine, die für den Export nach Excel verantwortlich ist.

Datenbank

Eine Tabelle unsere Anfragen zusammen mit seinen Planinformationen zu speichern. Eine Tabelle, in der alle Exporte gespeichert werden, damit wir die Historie behalten können.

Web UI

Durch ein Webinterface können wir Abfragen speichern, die automatisch nach einem Zeitplan ausgeführt werden müssen, stündlich einige, manche täglich, einige wöchentlich und einige monatlich. Auf der Schnittstelle kann der Benutzer seine konfigurierte Konfiguration für den Zeitplan vornehmen.

Wenn die Abfrage gespeichert wird, berechnen wir sofort die Nextruntime dieser Abfrage über eine selbst geschriebene SQL-Funktion und speichern diesen Wert in der Datenbank. Jedes Mal, wenn eine Aktualisierung für einen Datensatz stattfindet, Änderungen an der Abfrage vorgenommen werden oder sich die Zeitplaninformationen für ändern, aktualisieren wir das zuletzt geänderte Feld.

Dienstleistungen

Unser erster Dienst liest in allen Informationen, wo das Feld nextruntime nicht null ist. Diese Information behalten wir im Gedächtnis in einer Objektliste. Alle 5 Minuten prüfen wir, ob eine Änderung an diesem Export vorgenommen wurde, da die Abfrage geändert werden kann oder die Planinformation aktualisiert wird. Wenn wir einen aktualisierten Datensatz finden, aktualisieren wir diese Informationen in der Objektliste. Im selben Dienst werden alle 30 Sekunden eine Schleife über die Objektliste ausgeführt, um zu sehen, ob die Nextruntime dem tatsächlichen System Datetime entspricht. Wenn ja, fügen wir einen Datensatz der zweiten Tabelle mit einem bestimmten Status hinzu, so dass der zweite Dienst weiß, welche Datensätze verarbeitet werden müssen, und wir behalten auch eine inkrementelle Sequenznummer, so dass sie in der Reihenfolge exportiert werden.

Unser zweiter Service fragt die zweite Tabelle ab und ist verantwortlich für die Ausführung der Abfrage, Exportieren des Ergebnisses nach Excel, und wenn es fertig ist, aktualisieren Sie das Nextruntime Feld in der ersten Tabelle basierend auf den Zeitplaninformationen. Zum Erstellen der Excel-Dateien haben wir die OpenXml-Bibliothek verwendet.

Ich hoffe, es ist Ihnen ein wenig klar.

Verwandte Themen