Frage

Ich habe eine klassische ASP -Site, für die einige Datenbanktabellen nach Sitzungsdaten nach einem Zeitplan entleert werden müssen. Dieses System hat keinen Zugriff auf geplante Aufgaben (es befindet sich auf einem gemeinsam genutzten Webhost und mithilfe von MySQL Server).

Ich habe darüber nachgedacht, benutzt zu werden global.asa, um Ereignisse als solche abzufeuern:

  1. Application_OnStart - Löschen Sie alle Sitzungsdaten aus der Datenbank
  2. Application_OnEnd - Alle Sitzungsdaten löschen
  3. Session_OnStart - Erstellen Sie eine Benutzersitzung
  4. Session_OnEnd - Löschen Sie alle Sitzungsdaten, die sich auf diese Sitzung beziehen.

Gibt es einen Grund, warum ich keine Datenbankverbindungen erstellen sollte global.asa? Diese werden hier erstellt und zerstört, weder für Sitzungs- oder Anwendungsbereiche geteilt. Ich sehe es als eine Möglichkeit, diese Administratoraufgaben zweimal pro Benutzer (zu Beginn der Sitzung) auszuführen und nicht wieder entlassen zu werden, damit sie nur sehr wenig Datenbankverkehr entsprechen.

Hat jemand irgendwelche Ideen, warum dies schlecht sein kann? Alle Gründe, sich nicht mit einer Datenbank in eine Verbindung zu verbinden global.asa?

Wenn jemand der Meinung ist, dass die obige Idee eine schlechte ist, haben Sie andere Gedanken darüber, wie ich diese Tische regelmäßig ohne einen oder mehrere von:

  1. Geplante Aufgabe
  2. Datenbank geplante Aufgabe
  3. Ausführen des Codes auf Seite für jede Seite laden (daher die Session_OnStart Haken)

Ta '

Senior Kokosnuss

War es hilfreich?

Lösung

Ich würde für eine einzelne Sitzung in Aufräumarbeiten in Session_OnEnd und für alle Sitzungen in Application_OnStart. Wenn Ihre All-Session-CleanUp langsam ist, können Sie etwas hässliches Ding machen und diese Reinigung in ein separates ASP-Datei geben, mit dem Sie eine HTTP-Request für die Verwendung der XMLHTTP-Klasse erstellen, denken Sie daran, nicht zu warten, bis die Anfrage so abgeschlossen ist, wie sie abgeschlossen werden Wird nicht vor allen Code in anfangen, bedient zu werden Application_OnStart es läuft.

Andere Tipps

Sie können eine Webseite schreiben, auf der die Sitzungstabellen geleert werden, und diese Seite über eine geplante Aufgabe aus einem externen Feld aufrufen.

Es hängt davon ab, wie lange Ihre Aufräumarbeiten dauern werden. Da während des Ausführens von Application_Start keine Anfrage erbracht wird, kann es für eine Weile blockieren.

Darüber hinaus haben Sie keine Garantie dafür, dass Application_end (oder Session_end) in allen Fällen aufgerufen wird (wenn der Server heruntergefahren wird, wird er möglicherweise nicht abgefeuert, oder ein katastrophaler Fehler kann diese Ereignisse vollständig umgehen).

Der beste Weg wäre, wie Sie vorschlagen, eine geplante Aufgabe auszuführen, die für die Reinigung von veralteten Sitzungsdaten zuständig ist.

Wenn Sie einen konstanten Verkehr haben, können Sie am Ende eines Anforderungszyklus kleine Aufgaben abwickeln. Geben Sie einfach eine Antwort aus. Flush und führen Sie dann die DB -Abfragen aus. Natürlich müssen Sie Ihren eigenen Scheduler schreiben. Eine andere Option besteht darin, eine separate ASP -Datei (Tasklet) zu erstellen, die Sie mit einem Serverside, Async, xmlHttpreq zu Beginn der Anforderung angeben. Dadurch wird der Reinigungscode aus dem Anforderungszyklus des Clients ferngehalten und die Latenz verringert.

Eigentlich war ich nicht überrascht, wenn es bereits ein cleveres Appengine -basiertes Webanbieter/API gibt, das Ihr Legacy -Tasklet/Webhooks im Zeitplan pingen kann. Und wenn es nicht gibt, könnten Sie einen selbst schreiben, die Optionen sind endlos :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top