Wie wir alle wissen, ist es nicht einfach, eine Anwendung zu implementieren, die rund um die Uhr läuft. Eines meiner Projekte hielt einmal mehr als 20 Stunden unter heftiger Belastung durch und starb trotzdem heldenhaft. Glücklicherweise bieten uns ASP.NET und IIS einige einfache Möglichkeiten, mit denen wir problemlos superstabile .Net-Anwendungen erstellen können. Etwas unangenehm ist jedoch, dass die Konfigurationsmethoden unter Windows 2000 (Versionen unter IIS6.0) und Windows 2003 (IIS6.0) unterschiedlich sind.
Lassen Sie uns zunächst über das Windows 2000-System sprechen. Wer mit ASP.NET vertraut ist, sollte die Datei machine.config kennen. Sie ist im Verzeichnis %WindowPath%Microsoft.NetFramework%.NetVersion%CONFIG gespeichert. Verwenden Sie einen beliebigen Texteditor (der beliebteste ist natürlich „Notepad“), um die Datei zu öffnen und den Abschnitt <processModel...> zu finden. ASP.NET steuert den ASP.NET-Dienstprozess (aspnet_wp.exe oder w3wp.ext) basierend auf den Einstellungen in diesem Abschnitt. Der von uns geschriebene ASP.NET-Anwendungscode wird in diesem Prozessraum ausgeführt. Wenn Sie Framework 1.1 verwenden, werden in diesem Abschnitt mehr als n Eigenschaften angezeigt. Es handelt sich um die folgenden drei, gefolgt vom Gleichheitszeichen, ihren Standardwerten:
timeout="Infinite"
emptyTimeout="Infinite"
memoryLimit="60"
Sie können sie unter Framework 2.0 nicht sehen, aber Sie können sie manuell hinzufügen.
Lassen Sie mich die Bedeutung dieser drei Attribute übersetzen. Starten Sie den ASP.NET-Dienstprozess neu, nachdem er für die angegebene Zeitspanne ununterbrochen ausgeführt wurde. Sie können ihn im Format „HH:MM:SS“ zurücksetzen " Timeout = 24:00:00 bedeutet beispielsweise einen Neustart nach 24 Stunden. Wenn innerhalb der durch „idleTimeout“ angegebenen Zeit niemand zugreift, starten Sie den ASP.NET-Dienstprozess neu. Der Standardwert von „idleTimeout“ ist ebenfalls unendlich und die Einstellungsmethode ist wie oben; wenn der Prozentsatz des vom ASP.NET-Dienstprozess verwendeten Speichers am gesamten Systemspeicher die durch „memoryLimit“ angegebene Menge überschreitet, wird der ASP.NET-Dienstprozess neu gestartet.
Verstehen Sie, dass durch die Zusammenarbeit dieser drei Attribute der Dienstprozess neu gestartet werden kann, ohne es zu wissen, sodass unsere Anwendung weiterhin ausgeführt werden kann. Wenn ich dies sage, haben aufmerksame Leser möglicherweise das Problem entdeckt. Wenn der Dienstprozess neu gestartet wird, geht die Sitzung des Clients unweigerlich verloren und der Betrieb des Benutzers wird unterbrochen. Wie können wir erreichen, dass „Gott es nicht weiß und Geister es nicht wissen“?
Dieses Problem besteht zwar, seine Auswirkungen können jedoch durch die folgenden Maßnahmen minimiert oder sogar vollständig beseitigt werden:
Erstens können wir „idleTimeout“ auf einen angemessenen Wert festlegen. Normalerweise setze ich ihn dreimal auf das 1,5- bis 1,5-fache der Sitzungs-Timeout-Einstellung. Stellen Sie das Zeitlimit auf die Obergrenze ein, die das Programm bestehen kann. Normalerweise stelle ich es auf 24 Stunden ein. Dadurch wird der Dienstprozess gezwungen, neu zu starten, wenn er inaktiv ist. Da zu diesem Zeitpunkt keine Sitzung stattfindet, ist es nicht möglich, den Betrieb des Benutzers zu unterbrechen. Dieses Setup ist in einer Büroumgebung kleiner und mittlerer Unternehmen sehr effektiv, da nach Geschäftsschluss grundsätzlich kein Zugriff mehr möglich ist.
Natürlich weist die obige Methode große Einschränkungen auf und kann nur in bestimmten Situationen funktionieren. Wenn jemand weiterhin zugreift oder neu startet, wenn der Speicher das Limit überschreitet, wird der Betrieb des Benutzers trotzdem beeinträchtigt. Eine ultimative Lösung besteht darin, den Sitzungsstatus in einem separaten Prozess zu speichern. Auf ASP.Net ist dies auch mit einfacher Konfiguration möglich.
Quelle: BLOG-Aufnahmeraum