Wenn Sie ASP.net-Entwickler sind, kennen Sie sicherlich das HttpApplicationState-Objekt, in dem Sie anwendungsweite Daten speichern. Im Gegensatz zu HttpSessionState speichert das HttpApplicationState-Objekt diese Daten, solange Ihre Anwendung ausgeführt wird, während die im HttpSessionState-Objekt gespeicherten Daten zerstört werden, wenn die Sitzung endet, d. H. Der Benutzer hat sich abgemeldet oder war einige Zeit inaktiv.
Dies ist jedoch die Theorie. Die Realität ist nicht so einfach. Wenn Sie das HttpApplicationState-Objekt zum Speichern von Informationen verwenden möchten, seien Sie vorsichtig, da das, was auf Ihrem PC erfolgreich getestet wurde, bei der Bereitstellung auf dem Server möglicherweise nicht wie erwartet funktioniert.
Betrachten wir ein einfaches Beispiel, in dem Sie die Anzahl der Treffer auf Ihrer Website zählen möchten. Sie werden so etwas tun:
int cnt = (int) Anwendung[„hits“];;
Anwendung[„hits“] = cnt +1;
Sie testen den Code in Ihrem Visual Studio und alles funktioniert perfekt. Wenn Sie es jedoch auf Ihrem Server bereitstellen, bemerken Sie merkwürdiges Verhalten. Manchmal erhalten Sie die richtige Anzahl von Treffern, wenn Sie das nächste Mal eine Null oder eine Zahl finden, die weit unter der erwarteten liegt.
Um zu verstehen, was los ist, sollten Sie wissen, wie IIS mit Ihrer Webanwendung umgeht.
Tatsächlich steuern Sie nicht den Lebenszyklus Ihrer Anwendung, sondern IIS. Beim Start wird Ihre Anwendung erst ausgeführt, wenn die erste Webseitenanforderung Ihrer Anwendung den Server erreicht. Anschließend lädt IIS die Anwendung in den Speicher und führt sie in einem privaten Prozess aus. Zu diesem Zeitpunkt die Anwendung[„hits“] wird Null sein. Nach der ersten Anfrage wird es 1. Solange Anfragen denselben Prozess erreichen, wird die Anwendung[„hits“] steigt weiter an. Zu einem bestimmten Zeitpunkt beschließt der IIS jedoch, einen anderen Prozess für Ihre Anwendung zu erstellen. Jetzt werden zwei Prozesse ausgeführt, von denen jeder eine eigene Kopie der Anwendung hat[„hits“]. Also wenn der Wert der Anwendung[„hits“] Im ersten Prozess ist 100 der Wert Anwendung[„hits“] im zweiten Prozess wird Null sein!
Wenn ein Prozess für eine bestimmte Zeit inaktiv zu sein scheint, wird er von IIS beendet und alle darin enthaltenen Informationen werden zerstört, was bedeutet, dass Sie die Anzahl in der Anwendung verlieren[„hits“].
Was Sie lernen müssen, ist, dass das HttpApplicationState-Objekt pro Prozess eindeutig ist, vorausgesetzt, dieser Prozess ist noch aktiv. Sie können sicher sein, dass Ihr Prozess nicht aktiv ist (ausgeführt wird), wenn er längere Zeit inaktiv sein wird.
Um dieses Problem zu lösen, haben Sie zwei Möglichkeiten:
- Erzwingen Sie, dass der IIS nur einen Prozess für Ihre Anwendung verwaltet. Dies bedeutet, dass derselbe Prozess alle http-Anforderungen verarbeitet. Auf diese Weise erstellt IIS keine zusätzlichen Prozesse zur Verarbeitung neuer Anforderungen. Diese Lösung funktioniert nur für vorübergehende Daten, die nicht über die Lebensdauer Ihrer Anwendung hinaus leben müssen. Die Leistung wird jedoch beeinträchtigt, wenn die Anzahl der Treffer erheblich zunimmt, da IIS keinen anderen Prozess erstellen darf, um diese zu verarbeiten. Öffnen Sie zum Konfigurieren von IIS die IIS-Konsole, erweitern Sie den Anwendungspool und öffnen Sie die Seite mit den Anwendungseigenschaften. Klicken Sie auf der Registerkarte Start auf Konfiguration und wählen Sie die Registerkarte Leistung. Dort können Sie die "maximale Anzahl von Worker-Prozessen auf 1" setzen.
- Verwenden Sie eine Datenbank, um alle wichtigen Informationen zu speichern. Diese Lösung ist besser, wenn die Informationen gespeichert werden müssen und den Anwendungslebenszyklus überleben müssen. Dies ist auch dann nützlich, wenn mehrere Prozesse Ihrer Anwendung gleichzeitig erstellt werden.
Wie Sie sehen, kann die Definition von HttpApplicationState irreführend sein, wenn sie ohne die IIS-Konfiguration berücksichtigt wird. Es ist besser, sich nicht darauf zu verlassen, um anwendungsweite Daten zu speichern, sondern stattdessen eine Datenbank zu verwenden, um sie effektiv und dauerhaft zu speichern.
Immobilienmakler Heidelberg Makler Heidelberg