Benutzer mit den meisten Antworten
ASP.NET WebForms enableSessionState für Seiten

Frage
-
Hallo Forum,
ich habe eine ältere ASP.NET WebForms App von .NET 3.5 nach 4.6.1 migriert.
Dazu habe ich entsprechende MSDN Artikel befolgt mit dem Ergebnis, dass die App so halbwegs im Kompatibilitätsmode
des IE 11 auf Win 10 Prof. läuft.
Das Hauptproblem sind Exceptions der Art "System.Web.HttpException", wenn auf eine Session-Variable für Pages die
zwar von "System.Web.UI.Page" abgeleitet sind, selbst aber keine .aspx Seite haben, zugegriffen wird.
z.B. "Thread.CurrentThread.CurrentCulture = newCultureInfo(Session["CultureInfo"].ToString());"
Fehlermeldung:
"Der Sitzungszustand kann nur verwendet werden, wenn enableSessionState entweder in einer
Konfigurationsdatei oder in der Seitendirektive auf "true" festgelegt wurde.
Stellen Sie auch sicher, dass System.Web.SessionStateModule oder ein benutzerdefiniertes Sitzungszustandsmodul in der Anwendungskonfiguration im <configuration>\<system.web>\<httpModules>-Abschnitt enthalten ist."
In der Web.config habe ich das Attribut entsprechend gesetzt:
<pages enableSessionState="true"> <namespaces> <add namespace="System.Web.Optimization" /> <add namespace="Microsoft.AspNet.Identity" /> </namespaces> <controls> <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" /> </controls> </pages> <modules runAllManagedModulesForAllRequests="true"> <remove name="Session" /> <add name="Session" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </modules>
Es nutzt nichts. Immer noch System.Web.HttpException.
Wie gesagt, auf Seiten mit zugehöriger .aspx Seite tritt das nicht auf.
Wie kann ich den SessionState wieder aktivieren?
Ich arbeite mit den lokalen IIS nicht mit dem IIS-Express.
IIS sind entsprechend konfiguriert (Anwendungspool 4.6.1, Pipeline mode = Integriert, klassisch hat auch nichts gebracht).
Vielen Dank im Voraus für Tipps und Hinweise.
Gruß.
Antworten
-
Hallo Stefan,
danke für die Antwort.
Ich denke, dass das Problem behoben ist.
Es wurde bei der Instantiierung von diversen .aspx-Pages, die von einer gemeinsamen Basisklasse "RecipePage" abgeleitet sind, natürlich der Konstruktor der Basisklasse zuerst aufgerufen.
Im Ctor der Basisklasse "RecipePage" wurde auf Session-Variablen zugegriffen wurde, z.B.
public RecipePage() { Thread.CurrentThread.CurrentCulture = new CultureInfo(Session["CultureInfo"].ToString()); }
Der Konstruktor-Aufruf der Basisklasse passiert aber vor dem eigentlichen Page-Load-Event einer aspx-Seite.
Zu diesem Zeitpunkt ist die Session-Variable offensichtlich noch nicht gültig oder erzeugt.
Ich habe den Zugriff aus dem Konstruktor nun in eine überschriebene "OnLoad" Methode in der Basisklasse verlagert
und da ist das Session-Objekt nun vorhanden und gültig!
Der gleiche Code hat noch unter 3.5 funktioniert, nun unter 4.6.1 nicht mehr!
Stefan danke jedenfalls für die Hilfe. Ich denke du warst auf dem richtigen mit deiner Vermutung.
Gruß.
- Als Antwort vorgeschlagen Stefan FalzModerator Freitag, 28. Juli 2017 11:04
- Als Antwort markiert Stefan FalzModerator Samstag, 29. Juli 2017 06:30
Alle Antworten
-
Hi,
wie erzeugst Du denn die Instanz der Page, wenn sie nicht durch einen ASPX Aufruf automatisch erstellt wird? Poste bitte mal den entsprechenden Code und dazu bitte auch den der Methode, in der Du auf die Session Variable zugreifst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
danke für die Antwort.
Ich denke, dass das Problem behoben ist.
Es wurde bei der Instantiierung von diversen .aspx-Pages, die von einer gemeinsamen Basisklasse "RecipePage" abgeleitet sind, natürlich der Konstruktor der Basisklasse zuerst aufgerufen.
Im Ctor der Basisklasse "RecipePage" wurde auf Session-Variablen zugegriffen wurde, z.B.
public RecipePage() { Thread.CurrentThread.CurrentCulture = new CultureInfo(Session["CultureInfo"].ToString()); }
Der Konstruktor-Aufruf der Basisklasse passiert aber vor dem eigentlichen Page-Load-Event einer aspx-Seite.
Zu diesem Zeitpunkt ist die Session-Variable offensichtlich noch nicht gültig oder erzeugt.
Ich habe den Zugriff aus dem Konstruktor nun in eine überschriebene "OnLoad" Methode in der Basisklasse verlagert
und da ist das Session-Objekt nun vorhanden und gültig!
Der gleiche Code hat noch unter 3.5 funktioniert, nun unter 4.6.1 nicht mehr!
Stefan danke jedenfalls für die Hilfe. Ich denke du warst auf dem richtigen mit deiner Vermutung.
Gruß.
- Als Antwort vorgeschlagen Stefan FalzModerator Freitag, 28. Juli 2017 11:04
- Als Antwort markiert Stefan FalzModerator Samstag, 29. Juli 2017 06:30