Ich habe eine Site, die eine exklusive Sperre für einige Ressourcen besitzt. Ich habe die Ereignisse .NET Application_Start und Application_End verwendet, um die Sperre für diese Ressourcen zum entsprechenden Zeitpunkt zu aktivieren und aufzuheben. Damit dies ordnungsgemäß funktioniert, kann immer nur eine Instanz meiner Anwendung ausgeführt werden.
Um dies zu erreichen, habe ich die Disable Overlapped Recycle
Eigenschaft für den Anwendungspool auf festgelegt True
. Diese Eigenschaft soll sicherstellen, dass der alte Arbeitsprozess vollständig heruntergefahren wird, bevor ein neuer gestartet wird, wenn der App-Pool wiederverwendet wird. Dies funktioniert einwandfrei, wenn der App-Pool manuell über IIS wiederhergestellt wird, und zwar automatisch, wenn das Leerlaufzeitlimit erreicht wird, oder automatisch nach bestimmten Zeit- / Zeitintervallregeln.
Wenn die web.config für die Site aktualisiert wird, wird diese Regel jedoch nicht angewendet. Ein neuer Arbeitsprozess wird gestartet, bevor der alte beendet ist. Dies führt dazu, dass schlimme Dinge passieren. Ich habe die Disable Recycling for Configuration Changes
Eigenschaft so eingestellt, False
dass der App-Pool wiederverwendet werden soll, wenn die web.config aktualisiert wird. Dies geschieht häufig während der Entwicklung.
Ist das etwas, was erwartet wird, oder ist es ein Fehler in IIS? IST meine einzige Option, die so eingerichtet werden kann, dass das Ändern der web.config den App-Pool nicht wiederverwendet? Ich würde das lieber nicht tun, da ich mir ziemlich sicher bin, dass es viele Kopfschmerzen verursachen wird, wenn Leute die Konfiguration ändern und dann vergessen, den App-Pool zu recyceln.
Aktualisieren:
Genauer gesagt, wenn das neue Worker-Prozess- start
Ereignis aufgerufen wird, bevor der alte Worker-Prozess beendet wurde, wird das alte Worker-Prozess- end
Ereignis nie aufgerufen. Es passiert nicht in einer falschen Reihenfolge, es passiert überhaupt nicht.