none
ASP.NET WebForms enableSessionState für Seiten RRS feed

  • 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ß.

    Freitag, 28. Juli 2017 08:17

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ß.

    Freitag, 28. Juli 2017 10:35

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

    Freitag, 28. Juli 2017 10:12
    Moderator
  • 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ß.

    Freitag, 28. Juli 2017 10:35