Frage IIS 7.5 - Deaktivieren Sie die Überlappungsrecycle-Eigenschaft, die nicht befolgt wird, wenn web.config aktualisiert wird


Ich habe eine Site, die eine exklusive Sperre für einige Ressourcen enthält. Ich habe die .NET Application_Start- und Application_End-Ereignisse verwendet, um die Sperre für diese Ressourcen zu gegebener Zeit zu erfassen und freizugeben. Damit dies ordnungsgemäß funktioniert, kann immer nur eine Instanz meiner Anwendung ausgeführt werden.

Um das zu erreichen, habe ich das eingestellt Disable Overlapped Recycle Eigenschaft im Anwendungspool zu True. Diese Eigenschaft soll sicherstellen, dass der alte Worker-Prozess vollständig beendet wird, bevor ein neuer gestartet wird, wenn der App-Pool wiederverwendet wird. Dies funktioniert immer dann, wenn der App-Pool manuell über IIS, automatisch als Ergebnis des Inaktivitäts-Timeouts oder automatisch nach bestimmten Zeit- / Zeitintervallregeln rezykliert wird.

Wenn die Datei "web.config" für die Site aktualisiert wird, wird diese Regel jedoch nicht angewendet. Ein neuer Arbeitsprozess wird gestartet, bevor der alte heruntergefahren wird. Dies führt dazu, dass schlimme Dinge passieren. ich habe Disable Recycling for Configuration Changes Eigenschaft festgelegt auf False Ich möchte, dass der App-Pool bei der Aktualisierung von web.config wiederverwendet 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, so einzurichten, dass das Ändern der web.config den App-Pool nicht wiederverwendet? Ich würde das lieber nicht tun, da ich ziemlich sicher bin, dass es viele Kopfschmerzen mit Leuten verursachen wird, die die Konfiguration ändern und dann vergessen, den App-Pool zu recyceln.

Aktualisieren:

Um klarer zu sein, wenn der neue Arbeiterprozess start Das Ereignis wird aufgerufen, bevor der alte Arbeitsprozess beendet wurde, und dann der alte Arbeitsprozess end Ereignis wird nie aufgerufen - Es passiert nicht außerhalb der Reihenfolge, es passiert überhaupt nicht.


22
2018-03-07 15:43


Ursprung


Wie lange wird die web.config aktualisiert, bevor der neue Arbeitsprozess gestartet wird? - Greg Askew
Der neue Arbeitsprozess beginnt, sobald ich versuche, nach einem Recycling auf die Site zuzugreifen - also weniger als eine Sekunde, wenn ich schnell bin. Wenn das Ereignis "shutdown" des alten Worker-Prozesses zurückbleibt, wird es 20 bis 30 Sekunden nach dem Recycling ausgeführt. - John
Ich habe das gleiche Problem. Es gibt Überschneidungen - Andrew Rimmer
Durch das Bearbeiten der Datei web.config wird die appDomain neu geladen. Die AppDomain ist vom AppPool getrennt. Sie sollten keine neue W3WP-Prozess-ID sehen, wenn Sie nur die Datei web.config ändern. Siehe hier treeloop.com/blog/iis-application-domain-und-pool-recycling - kheld
@ kheld ist absolut richtig (vielleicht fügen Sie dies als Antwort) Dies ist kein appool Überlappung, es ist eine appDomain Überlappung. Ich glaube nicht, dass Sie damit aufhören können, aber Sie können das Recycling von App-Domänen bei Änderungen deaktivieren. - Sam Cogan


Antworten:


Von diesem MSDN-Post: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

Als Teil Ihres Codebereitstellungsprozesses sieht Ihr Pool daher wie folgt aus, wenn Sie eine dieser Änderungen bereitstellen:

Sofortiger Recycling

  • Web.config ändert sich
  • Machine.config ändert sich
  • Global.asax ändert sich
  • Bin Verzeichnis ändert sich
  • App_Code ändert sich

(ausgeliehen von:  https://stackoverflow.com/questions/302110/what-causes-an-application-pool-in-iis-to-recycle )


0
2018-05-03 19:03