Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[Gelöst] - Code ausführen beim Initialisieren einer Webanwendung
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

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

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von mosspower am .
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

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ß
private Nachricht | Beiträge des Benutzers
Timur Zanagar
myCSharp.de - Member

Avatar #avatar-3412.jpg


Dabei seit:
Beiträge: 1.457

beantworten | zitieren | melden

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).
private Nachricht | Beiträge des Benutzers