Wie höre ich das IIS-Shutdown-Ereignis in ASP.NET?

7

Ich habe in meiner statischen ASP.NET-Variable, die sich bei jeder X-Einfügungen in die DB entleert. Problem ist, wenn ich die Anwendung veröffentliche, wird der IIS-Prozess mit all meinem statischen Material getötet.

Wie kann ich es erhalten - oder wie kann ich es leeren, sobald die ASP.NET-Anwendung heruntergefahren wird?

danke

    
Himberjack 18.01.2011, 11:36
quelle

4 Antworten

10

Global.asax

%Vor%     
Hawxby 18.01.2011, 11:39
quelle
6

Es ist riskant, sich auf Ereignisse zum Herunterfahren von Anwendungen zu verlassen, um eine Datenbank auf dem neuesten Stand zu halten. Wenn der Neustart von IIS forciert wird oder ein Stromausfall auftritt, verpassen Sie das Ereignis.

    
djeeg 18.01.2011 11:45
quelle
3

Sie erhalten möglicherweise keine Benachrichtigung darüber, dass IIS heruntergefahren wird. Denken Sie darüber nach, was passieren wird, wenn der IIS AppPool abstürzt oder was passiert, wenn der Server einfach Strom verliert.

Sie können sich nicht darauf verlassen, jemals von Shutdown-Ereignissen zu hören. Wenn IIS herunterfahren möchte, wird es Ihre Anwendung nicht unbedingt benachrichtigen. Ich empfehle Ihnen, Ihr Writebuffering / Caching-Szenario zu überdenken - behalten Sie nur die Daten im Speicher, die Sie sich leisten können zu verlieren.

    
Sander 18.01.2011 11:48
quelle
3

Wie bereits erwähnt, ist es nicht empfehlenswert, dass die Anwendung während Application_End große Daten persistiert, da dies beim Herunterfahren des Anwendungspools ausgelöst werden könnte, nicht am Anfang des Herunterfahrens. Dies wird detaillierter erklärt (aber immer noch kurz) hier .

Wenn Sie immer noch das Herunterfahren eines Anwendungspools für alle Fälle abfangen möchten, die ihn nicht sofort beenden, können Sie Folgendes tun:

Dirty way

1) Zeitlimit für Herunterfahren abrufen - IIS-Manager - & gt; Anwendungspools - & gt; - & gt; Erweiterte Einstellungen ... - & gt; Prozessmodellgruppe - & gt; Zeitlimit für die Abschaltung (Sekunde)

2) Erstellen Sie einen Thread / Task in der Anwendung, der doppelt so häufig ausgeführt wird wie das Zeitlimit für das Herunterfahren, um sicherzustellen, dass der Status "Herunterfahren" abgefangen werden kann. Dieser Thread sollte

i) überprüfe, ob der Anwendungspool heruntergefahren wird

%Vor%

ii) Wenn das Herunterfahren eingeschaltet ist, mach deine Sachen. Stellen Sie sicher, dass Zeug nur einmal ausgeführt wird

Korrekterer Weg (wie angegeben hier )

1) Erstellen Sie eine Klasse, die IRegisteredObject

implementiert %Vor%

2) Registrieren Sie Ihr Objekt ( Global.asax.cs )

%Vor%     
Alexei 19.01.2017 15:39
quelle

Tags und Links