Frage

Server -Seite VB ASP -Code auf einem Windows 2003 -Computer, ASP.NET 2.0* installiert. Wir haben ein seltsames Problem, bei dem das erste Mal, dass ein Benutzer eine Verbindung zur Website herstellt, das Session_onstart in der global.asa feuert, das Sitzungsobjekt ist jedoch NULL. Etwas Einfaches wie:

Session.Timeout = 30

verursacht den folgenden Fehler: Objekt erforderlich: 'Sitzung'

Die Website wurde auf der Registerkarte IIS Manager Home Directory "erstellt", und die Sitzungen sind auf der Konfigurationsseite für die Website aktiviert.

In den meisten Fällen existiert das Sitzungsobjekt, wenn der Benutzer die Seite aktualisiert. Aber dieser erste Besuch für einen einzigartigen Benutzer verursacht immer den Fehler.

Anregungen? Der Code hat keinen Fehler, da er auf dem alten Win2000 -System funktioniert hat.

Nur um wieder zu wiederholen: Windows 2003 Server, Auslauf IIS6, wobei .NET 2.0 installiert ist. Die Website wird als Anwendung ausgeführt, nicht als virtuelles Verzeichnis.

War es hilfreich?

Lösung

Das Problem herausgefunden. Es lag daran, mehr als einen Arbeiter im App -Pool zu haben, der für die Website verwendet wurde. Da es keine Garantie gab, welcher Arbeitsprozess die Anfrage eines Kunden und jeden Arbeiterprozess seine eigene Instanz der Kundensitzung erstellen würde, würde die Sitzung fallen gelassen und nachgebildet, als IIS entschied, dass ein anderer Arbeitsprozess eine Anfrage bearbeiten sollte. Das Problem wurde behoben, indem nur einen Arbeiterprozess im App -Pool verwendet und alle anderen Websites aus dem App -Pool und in die eigene Weise gezogen wurden.

Ich suche jetzt nach einer Möglichkeit, mehrere Mitarbeiter im App -Pool zu haben, aber den Kunden beim Arbeitsprozess festhalten. Aber das ist ein anderes Problem, das ich recherchieren werde.

Andere Tipps

Ein ziemlich interessantes Problem.

Wir wissen, dass die Sitzung, wenn sie ausdrücklich aufgegeben wird oder schließlich ausgeht, sofort zerstört wird. Ich würde Code wie folgt hinzufügen, um zu garantieren, dass dies nicht passieren kann.

If Session("test") Is Nothing Then
    Response.Redirect("Whatever.asp")
End If

Sie können auch den Code aufrufen, der Ihre Objekte in diesem Block erstellt. Wenn Sie feststellen, dass die Sitzung irgendwie zerstört wurde, könnten Sie sie neu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top