Ich arbeite gerade an einem Projekt mit spezifischen Anforderungen. Ein kurzer Überblick über diese sind wie folgt:
Das aktuelle (Pre-Pre-Production-) Modell für die Auslösung der Web-Service-Kommunikation erfolgt über eine Datenbanktabelle, in der Triggeranforderungen gespeichert werden, die beim manuellen Eingriff generiert wurden. Ich möchte nicht wirklich mehrere Trigger-Mechanismen haben, möchte aber die Datenbanktabelle mit Triggern basierend auf dem Zeitpunkt des Aufrufs füllen können. Wie ich es sehe, gibt es zwei Möglichkeiten, dies zu erreichen.
1) Passen Sie die Trigger-Tabelle an, um zwei zusätzliche Parameter zu speichern. Ein Wesen "Ist das zeitbasiert oder manuell hinzugefügt?" und ein Nullable-Feld zum Speichern der Timing-Details (genaues zu bestimmendes Format). Wenn es sich um einen manuell erzeugten Trigger handelt, markieren Sie es als verarbeitet, wenn der Trigger ausgelöst wurde, aber nicht, wenn es ein zeitgesteuerter Trigger ist.
oder
2) Erstellen Sie einen zweiten Windows-Dienst, der die Trigger in festgelegten Intervallen erstellt.
Die zweite Option scheint für mich eine Täuschung zu sein, aber die Verwaltung von Option 1 könnte sich leicht in einen Programmier-Albtraum verwandeln (Woher weißt du, ob die letzte Umfrage der Tabelle das Ereignis zurückgab, das ausgelöst werden muss und wie geht es dir? dann stoppe es bei der nächsten Umfrage erneut auszulösen)
Ich würde es begrüßen, wenn jemand ein paar Minuten Zeit hätte, um mir zu helfen, zu entscheiden, welche Route (eine dieser zwei oder möglicherweise eine dritte, nicht aufgelistete) zu nehmen.
Warum nicht einen SQL-Job anstelle des Windows-Dienstes verwenden? Sie können alle von Ihnen db "Trigger" -Code in Stored Procedures einkapseln. Dann können Ihre Benutzerschnittstelle und Ihr SQL-Job dieselben Stored Procedures aufrufen und die Trigger auf die gleiche Weise erstellen, unabhängig davon, ob sie manuell oder in einem Zeitintervall erfolgen.
So wie ich es sehe, ist das.
Sie haben einen Windows Service, der die Rolle eines Schedulers spielt und darin einige Klassen, die einfach die Webservices aufrufen und die Daten in Ihre Datenbanken stellen.
Sie können diese Klassen also auch direkt von der WebUI aus verwenden und die Daten basierend auf dem WebUI-Trigger importieren.
Ich mag die Idee nicht, eine vom Benutzer generierte Aktion als Flag (Trigger) in der Datenbank zu speichern, wo ein Dienst sie abfragen wird (in einem Intervall, das nicht unter der Kontrolle des Benutzers steht), um diese Aktion auszuführen.
Sie könnten sogar den ganzen Code in eine exe umwandeln, die Sie dann mit dem Windows Scheduler einplanen können. Und rufen Sie dieselbe exe auf, wenn der Benutzer die Aktion über die Web-UI auslöst.
Warum nicht einen SQL-Job anstelle des Windows-Dienstes verwenden? Sie können alle von Ihnen db "Trigger" -Code in Stored Procedures einkapseln. Dann können Ihre Benutzerschnittstelle und Ihr SQL-Job dieselben Stored Procedures aufrufen und die Trigger auf die gleiche Weise erstellen, unabhängig davon, ob sie manuell oder in einem Zeitintervall erfolgen.
Ich arbeite gerade an einem Projekt mit spezifischen Anforderungen. Ein kurzer Überblick über diese sind wie folgt:
Das aktuelle (Pre-Pre-Production-) Modell für die Auslösung der Web-Service-Kommunikation erfolgt über eine Datenbanktabelle, in der Triggeranforderungen gespeichert werden, die beim manuellen Eingriff generiert wurden. Ich möchte nicht wirklich mehrere Trigger-Mechanismen haben, möchte aber die Datenbanktabelle mit Triggern basierend auf dem Zeitpunkt des Aufrufs füllen können. Wie ich es sehe, gibt es zwei Möglichkeiten, dies zu erreichen.
1) Passen Sie die Trigger-Tabelle an, um zwei zusätzliche Parameter zu speichern. Ein Wesen "Ist das zeitbasiert oder manuell hinzugefügt?" und ein Nullable-Feld zum Speichern der Timing-Details (genaues zu bestimmendes Format). Wenn es sich um einen manuell erzeugten Trigger handelt, markieren Sie es als verarbeitet, wenn der Trigger ausgelöst wurde, aber nicht, wenn es ein zeitgesteuerter Trigger ist.
oder
2) Erstellen Sie einen zweiten Windows-Dienst, der die Trigger in festgelegten Intervallen erstellt.
Die zweite Option scheint für mich eine Täuschung zu sein, aber die Verwaltung von Option 1 könnte sich leicht in einen Programmier-Albtraum verwandeln (Woher weißt du, ob die letzte Umfrage der Tabelle das Ereignis zurückgab, das ausgelöst werden muss und wie geht es dir? dann stoppe es bei der nächsten Umfrage erneut auszulösen)
Ich würde es begrüßen, wenn jemand ein paar Minuten Zeit hätte, um mir zu helfen, zu entscheiden, welche Route (eine dieser zwei oder möglicherweise eine dritte, nicht aufgelistete) zu nehmen.
@Vaibhav
Leider erlaubt die physische Architektur der Lösung keine direkte Kommunikation zwischen den Komponenten außer Web-UI zu Datenbank und Datenbank zu Service (die dann die Web-Services aufrufen kann). Ich stimme jedoch zu, dass die Wiederverwendung der Kommunikationsklassen hier das Ideal ist - ich kann es einfach nicht innerhalb der Grenzen unseres Geschäfts machen. *
* Ist es nicht immer so, dass eine technisch "bessere" Lösung durch externe Faktoren behindert wird?
@Vaibhav
Leider erlaubt die physische Architektur der Lösung keine direkte Kommunikation zwischen den Komponenten außer Web-UI zu Datenbank und Datenbank zu Service (die dann die Web-Services aufrufen kann). Ich stimme jedoch zu, dass die Wiederverwendung der Kommunikationsklassen hier das Ideal ist - ich kann es einfach nicht innerhalb der Grenzen unseres Geschäfts machen. *
* Ist es nicht immer so, dass eine technisch "bessere" Lösung durch externe Faktoren behindert wird?
Tags und Links sql triggers service timer web-services