Laden...

[Gelöst] - Code ausführen beim Initialisieren einer Webanwendung

Erstellt von mosspower vor 13 Jahren Letzter Beitrag vor 13 Jahren 966 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 13 Jahren
[Gelöst] - Code ausführen beim Initialisieren einer Webanwendung

Hallo "Kollegen",

mittels welcher Technologie kann in einer ASP.NET-Anwendung sichergestellt werden, dass immer beim Initialisieren (z.B. Neustart des Webservers oder Ändern der Web.config) gewisser Code ausgeführt wird.

Ich dachte, dass das in der global.asax geht, Event Application_Start oder Application_Init, was aber nicht der Fall ist. Diese beiden Events werden immer nur dann gefeuert, wenn eine Anwendungs-URL erstmalig angefordert wird. HttpHandler verhalten sich identisch (denke ich jetzt einfach mal ohne es zu wissen, da es ja Erweiterungen sind).

Kann mir da jemand helfen? Ist das eine Einstellung im IIS?

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

das Problem dabei: Die ASP.net Anwendung startet erst mit der ersten Anforderung... vorher wird da gar nix ausgeführt.
Änderung der Web.config sorgen automatisch für einen Neustart der Anwendung - aber ebenfalls erst beim nächsten Request.

Eine Einstellung im IIS gibt es dafür AFAIK nicht, und ich kenne auch keine Möglichkeit das Verhalten zu umgehen, außer eben einen Request an die Anwendung abzusetzen.

Gruß, MarsStein

P.S.: Wenn Du verrätst, was Du vorhast bzw. warum es wichtig ist daß schon vor dem ersten Request Code ausgeführt wird, kann man ggf. nach einem Workaround suchen.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 13 Jahren

Hallo MarsStein,

ich möchte einfach Daten Cachen. Der initiale Aufruf kann zwei Minuten dauern.
Ich möchte beim Start der Anwendung und bei jedem Tageswechsel die Basisdaten (bei ca. über 90 Prozent aller Anfragen ausreichend) cachen.

Klar kann ich das auch initial machen, wenn der erste eine Applikations-URL anfordert - wäre aber nicht toll, wenn der dann auch genau diese Daten braucht, denn dann hätte ich ja nix gewonnen.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

ich kenne jetzt ja Dein Projekt nicht, aber wenn möglich würde ich versuchen bei jedem Request die verwendeten Daten zu lesen und zu cachen, falls sie nicht schon gecached sind. Sind sie bereits im Cache, werden sie direkt von dort gelesen.

So füllt der Cache sich dann selbst sukzessive mit den bereits schon einmal verwendeten Daten auf, nur Daten, die noch nie verwendet wurden, müssen neu gelesen werden.
Damit wirst Du ggf. auch die 2 Minuten Initialisierungszeit los.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 13 Jahren

Diese Vorgehensweise benutze ich auch oft, geht hier aber nicht, weil ich für einen bestimmten Zeitraum, z.B. immer die letzten 60 Tag Daten vorrätig haben muss.

Bei einer Abfrage dann, so habe ich vor, hole ich mir nur die relevanten Daten, je nach der Datumauswahl, aus dem gecachten Objekt (en)

Bitte keine Fragen, warum das so umgesetzt ist, das will ich nicht kommentieren, das war nicht meine Baustelle. Für eine komplette Änderung bekomme ich kein Budget.

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

wie gesagt, mit dem IIS ist das wohl nicht hinzukriegen.
Folgene mögliche Lösungen werden Dir aber vermutlich genausowenig schmecken (zugegeben: mir auch nicht, aber sonst fällt mir nix ein):

  1. Eine geplante Task oder ein Dienst, der regelmäßig Dummy-Anfragen stellt und so dafür sorgt, daß die Webanwendung quasi immer läuft.

  2. Ein Dienst der Dir die Daten direkt bereitstellt. Dann kann dieser Dienst das cachen übernehmen.

  3. Ein Dienst der statt des IIS als Webserver fungiert und die Anfragen selbst entgegennimmt und das ASP.net-Processing anstösst. Damit hast Du dann alles selbst in der Hand.

Wie gesagt, alles nicht sehr schön 🤔

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 13 Jahren

Hallo MarsStein,

danke für Deine Hilfe. Ich werde es dann einfach so machen, dass es angetriggert wird, wenn die erste Anforderung an die Anwendung gesendet wird. (global.asax)

Ich dachte, dass es für mein spezielles Problem genau die richtige Lösung gäbe, deshalb die Frage im Forum hier vorab.

Vielen Dank für die Infos und die Hilfe

Gruß

1.457 Beiträge seit 2004
vor 13 Jahren

Falls du die Möglichkeit hast, die Anwendung auf .NET 4 laufen zu lassen, dann mach das. Hier hast du die Möglichkeit der neuen Autostart Funktion (http://www.asp.net/learn/aspnet-4-quick-hit-videos/video-8843.aspx).