IIS 7.5 - Deaktivieren Sie die überlappende Recycle-Eigenschaft, die bei der Aktualisierung von web.config nicht berücksichtigt wird

25

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 RecycleEigenschaft 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 ChangesEigenschaft so eingestellt, Falsedass 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- startEreignis aufgerufen wird, bevor der alte Worker-Prozess beendet wurde, wird das alte Worker-Prozess- endEreignis nie aufgerufen. Es passiert nicht in einer falschen Reihenfolge, es passiert überhaupt nicht.

John
quelle
Wie lange nach der Aktualisierung der Datei web.config, bevor der neue Arbeitsprozess gestartet wird?
Greg Askew
Der neue Arbeitsprozess wird gestartet, sobald ich versuche, nach einem Recycling auf die Site zuzugreifen. Wenn ich schnell bin, dauert es also weniger als eine Sekunde. Wenn das Ereignis "Herunterfahren" des alten Worker-Prozesses verlassen wird, erfolgt es 20 bis 30 Sekunden nach dem Recycling.
John
Ich habe das gleiche Problem. Es gibt Überschneidungen
Andrew Rimmer
11
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-and-pool-recycling
kheld
1
@kheld ist absolut richtig (vielleicht als Antwort hinzufügen), dies ist keine Überlappung von appool, sondern eine Überlappung von appDomain. Ich glaube nicht, dass Sie dies stoppen können, aber Sie können das Recycling von App-Domains bei Änderungen deaktivieren.
Sam Cogan

Antworten:

1

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

Als Teil Ihres Code-Bereitstellungsprozesses sieht es so aus, als würde Ihr Pool wiederverwendet, wenn Sie eine der folgenden Änderungen bereitstellen:

Sofort recyceln

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

( Ausgeliehen von: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

Matt McDonald
quelle