Zeitgesteuerte Ereignisauslöser

9

Ich arbeite gerade an einem Projekt mit spezifischen Anforderungen. Ein kurzer Überblick über diese sind wie folgt:

  • Daten werden von externen Webservices abgerufen
  • Daten werden in SQL 2005
  • gespeichert
  • Daten werden über eine Web-GUI manipuliert
  • Der Windows-Dienst, der mit den Web-Services kommuniziert, hat keine Verbindung mit unserer internen Web-Benutzeroberfläche, außer über die Datenbank.
  • Die Kommunikation mit den Webdiensten muss sowohl zeitbasiert sein als auch durch Benutzereingriff auf der Webbenutzeroberfläche ausgelöst werden.

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.

    
ZombieSheep 06.08.2008, 10:43
quelle

3 Antworten

1

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.

    
brendan 07.08.2008, 18:24
quelle
0
___ answer3275 ​​___

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.

    
___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ tag123webservices ___ Ein "Web-Service" ist ein Softwaresystem, das Interoperabilität zwischen Maschine und Maschine über das World Wide Web unterstützt. ___ answer5101 ___

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.

    
___ qstntxt ___

Ich arbeite gerade an einem Projekt mit spezifischen Anforderungen. Ein kurzer Überblick über diese sind wie folgt:

  • Daten werden von externen Webservices abgerufen
  • Daten werden in SQL 2005
  • gespeichert
  • Daten werden über eine Web-GUI manipuliert
  • Der Windows-Dienst, der mit den Web-Services kommuniziert, hat keine Verbindung mit unserer internen Web-Benutzeroberfläche, außer über die Datenbank.
  • Die Kommunikation mit den Webdiensten muss sowohl zeitbasiert sein als auch durch Benutzereingriff auf der Webbenutzeroberfläche ausgelöst werden.

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.

    
___ tag123service ___ Ein Dienst ist eine ausführbare Datei mit langer Laufzeit, die bestimmte Funktionen ausführt und keine Benutzereingriffe erfordert. ___ answer3282 ___

@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?

    
___ qstnhdr ___ Zeitgesteuerte Ereignisauslöser ___ tag123timer ___ Timer ist ein Steuerelement, das über die Funktionalität verfügt, in regelmäßigen, vom Benutzer konfigurierten Intervallen eine benutzerdefinierte Aktion auszulösen. ___ tag123triggers ___ Trigger sind Regeln, die, wenn sie als wahr ausgewertet werden, eine oder mehrere Aktionen ausführen. ___
Vaibhav 06.08.2008 10:53
quelle
0

@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?

    
ZombieSheep 06.08.2008 11:03
quelle