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
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.
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
2) Registrieren Sie Ihr Objekt ( Global.asax.cs
)