Die ASP.NET-Sitzung wird unerwartet beendet

8

Ich habe ein sehr seltsames Problem mit der Sitzung zu ASP.NET 2.0. Das System, an dem ich arbeite, verwendet Sitzungsvariablen zum Speichern von Parametern für Objekte (wie Fragen und Antworten) zum Generieren eines Berichts. Dies sind Instanzen von Klassen mit demselben Namen. Daher werden sie wie folgt mit Parametern gefüllt:

Dieser Bericht wird über 4 aspx Seiten generiert. Zuerst werden Standort- und Datumsparameter definiert, auf der zweiten Seite werden Fragen und auf der dritten Seite Antworten gespeichert. Die letzte zeigt Links zu generierten Berichten im Excel- und HTML-Format an. Alle variablen Daten werden in der Sitzung gespeichert, und alles geht gut, bis zur letzten Seite, wenn etwas wie eine Session.Abandon () passiert, Session_End-Ereignis ausgelöst wird und alle Variablen verloren gehen. Dies geschieht nur einmal am Tag, für jeden angemeldeten Benutzer bei der ersten Verwendung des Berichts, und dann können Sie den ganzen Tag Dutzende Male versuchen und werden es nicht mehr sehen.

Das Problem tritt IMMER auf der gleichen Seite auf und der Sitzungsmodus ist InProc.

Ich habe die folgenden Validierungen bereits durchgeführt:

  1. Überprüft, ob irgendwelche Session.Abandon () - oder Session.Clear () - Befehle vorhanden waren. Es gibt keine.
  2. Überprüfte Sitzungszeitüberschreitung, es ist auf 18 Minuten eingestellt und das Problem tritt zu jeder Zeit wie oben beschrieben auf, unabhängig davon, wie lange Sie es innerhalb von 18 Minuten benutzt haben.
  3. Checked Forms Timeout, unter Authentifizierung. Es ist auch auf 18 Minuten eingestellt.
  4. Ich habe gelernt, dass es einen Fehler bei Server.Transfer () gibt, der zuweilen die Sitzung und den Viewstate bereinigt und durch Response.Redirec ()
  5. ersetzt wurde
  6. Überwachen Sie die Sitzung Zeile für Zeile, und alles läuft gut, und wenn die Seite vollständig geladen ist, stirbt sie einfach. Alle Variablen sind weg, aber die Sitzung funktioniert noch.
  7. Soweit es mich betrifft, ist IIS korrekt konfiguriert. Ich habe keinen Zugriff darauf, aber alle anderen Systeme funktionieren einwandfrei.
  8. Ich habe auch einige der oben genannten Systeme analysiert, die nach Hinweisen auf mögliche Ereignisse suchen, aber ihre web.config-Dateien sind denen sehr ähnlich, auf denen das Problem auftritt, und es ist kein spezieller Code für die Interaktion mit der Sitzung implementiert anders.
  9. Ich habe auch über die Überwachung von IIS für Neustarts von Anwendungen nachgedacht, aber ich bin mir ziemlich sicher, dass es das Standardlimit von 15 nicht überschreitet. Trotzdem habe ich keinen Zugriff auf den IIS-Server und alle Tests auf meinem Computer verwenden ASP. NET-Entwicklungsserver. Das Problem tritt bei beiden auf.
  10. Habe die Möglichkeiten des Prozessrecyclings überprüft, wie .config und asax Dateiänderungen, Änderungen am Verzeichnis / bin, es passiert nichts.

Folgende Einschränkungen gelten:

  1. Aufgrund von Unternehmensrichtlinien kann der Sitzungsmodus nicht zu einem anderen als InProc geändert werden.
  2. Der Berichtserstellungs "Prozess" wurde auf 4 Seiten erstellt. Ich stimme dem nicht zu, kann es aber aufgrund von Zeit- und Budgetbeschränkungen nicht wiederherstellen.

Irgendwelche Gedanken oder Lösungen sind hilfreich. Ich werde in Kontakt bleiben für alle Updates und Tests, die notwendig sind.

    
Alexandre Fernandes 28.06.2011, 14:51
quelle

3 Antworten

2

Ich möchte allen für die Mühe danken!

Ich und mein Team haben herausgefunden, was in diesem Fall passierte. Es gab eine Methode, die temporäre Dateien und Verzeichnisse innerhalb des Website-Ordners löschte, was eine Wiederverwertung und eine Sitzungspülung verursachte. Der Code berechnete Datum und Uhrzeit und sollte die Verzeichnisse alle 24 Stunden löschen. Wenn sich ein Benutzer zum ersten Mal beim System anmeldet und den Bericht erstellt, löschte er das Verzeichnis und löschte die Sitzung.

    
Alexandre Fernandes 29.06.2011, 00:34
quelle
1

Ein paar Vorschläge:

  1. Analysiere den ersten Treffer lokal und sieh nach, ob es etwas Einzigartiges im Pfad gibt.
  2. Stellen Sie sicher, dass der erste Treffer kein Problem mit dem Arbeitsprozess verursacht
  3. Stellen Sie sicher, dass Sie den Sitzungswert nicht vor einem Postback verwenden

Was ich denke, ist # 3. Sie richten die Werte in einer Sitzung ein und nehmen sie dann vor einem Postback, in dem der Sitzungswert tatsächlich gespeichert ist, wieder aus dieser Sitzung heraus. Da es nur beim ersten Versuch passiert, spiegeln die Symptome diesen Verdacht wider. Wenn ich richtig liege, lösen Sie dies, indem Sie an derselben Stelle konsumieren, an der Sie den Sitzungswert verbraucht haben, anstatt die Sitzung festzulegen, und dann versuchen, in derselben Anfrage davon zu profitieren.

    
Gregory A Beamer 28.06.2011 14:57
quelle
0

Ich hatte ein Problem mit den Sitzungen. In meinem Fall war das Problem die maximale Worker-Threadanzahl des Anwendungspools. Wenn Sie die Standardsitzung von asp.net verwenden wollen, müssen Sie es machen 1. oder ein anderer Thread kann die Sitzungen nicht bekommen.

    
user3812138 19.03.2015 08:16
quelle