Was tatsächlich bewirkt, dass Session_Start aufgerufen werden?
In einer kleinen demo-Anwendung, die ich Baue ich den code zum initialisieren der Datenbank, in der Globalen.Session_Start () - Ereignis. Allerdings merke ich, dass dieses Ereignis wird nicht ausgelöst, wenn ich laufen gehe durch die app im debugger auf die Entwicklungs-server (noch nicht getestet, es überall sonst noch).
Frage 1: Was gibt? Wann wird Session_Start() tatsächlich aufgerufen? Ich nehme an, es ist, wenn die session startet, aber sollte nicht der Beginn jeder neuen Sequenz der Anfragen, die Ursache einer Sitzung automatisch zu starten? Sicherlich eine session starten sollte, wenn ich mit F5, also warum nicht.
Frage 2: gibt es einen besseren Ort, wo der code zum initialisieren der Datenbank gehen sollte? eher würde ich es nicht in der Application_Start-Methode, da es nicht immer aufgerufen, wenn das Debuggen.
PS. Durch initialisieren der Datenbank weiß ich nicht, dass ich eine Verbindung zu SqlServer und lassen Sie es für immer geöffnet. Ich bin mit db4o und ich öffnen Sie eine vordefinierte Datenbank-Datei. Wie ich schon sagte, dies ist nur eine demo-Anwendung, ich bin nicht besorgt über die schlechte Verwaltung von Ressourcen oder ähnlichem.
- Können Sie erläutern, auf "initialisieren der Datenbank"?
- - Erarbeitet. Ich bin im Grunde sagen, Db4o zu benutzen, um eine bestimmte Datei für das zeichnen von Daten
- Versehentlicher Doppel-post. Gelöscht, der andere derjenige, der mehr Infos hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht ganz sicher, dass eine Sitzung "beginnt", bis Sie Zugriff auf das Session-Objekt. Sonst würde es scheinen, wie Sie unnötigen Aufwand, um das Feuer bis eine nicht mehr benötigte Sitzung.
Ich weiß, dies ist eine alte post, aber vielleicht hilft es jemand:
Den session_start nicht Feuer, es sei denn, Sie sind tatsächlich beim Lesen oder schreiben auf das session-Objekt.
Wenn Sie möchten, nutzen Sie die session_start-Ereignis braucht aber nicht den session-store, können Sie fügen Sie den folgenden, um die page-Direktive Ihrer landing-pages:
Dadurch wird die session_start-Ereignis auslösen, ohne dass Sie speichern alles, was in der session-Objekt.
Das Problem ist, dass Sie können verlassen Sie sich nie auf diese Ereignisse zu feuern, weil die ASP.NET Laufzeit entscheidet, ob Sie entlassen werden oder nicht, weil Sie vielleicht gar nicht erforderlich und können übersprungen werden, um Ressourcen zu sparen.
Beispielsweise eine Antwort.Redirect bricht die ganze Verarbeitung einer Anforderung, indem Sie eine ThreadAbortException-und den Seite/Steuerung lifecycle-Ereignisse nach, die nicht gefeuert werden, das ist der Grund, warum zum Beispiel gibt es keine End_Request oder etwas ähnliches.
Ich würde in Erwägung ziehen Sie Ihre Logik, um eine andere Ebene (unabhängig von ASP.NET), und vielleicht initialisieren der Datenbank wenn Sie tatsächlich angefordert von einer Seite? Dann können Sie schließen Sie die Datenbank-Datei innerhalb der gleichen Methode, die Sie benötigt die information, damit würden Sie viel mehr unabhängig vom Zustand der Anwendung/Sitzung.
Nicht sicher, ob dies die Informationen, die Sie suchen, obwohl 🙂
Was Session-Modell verwenden Sie? Im Fall von SQL Server die gesicherten Sitzungen kann es nicht starten Sie eine neue Sitzung. Im Falle von InProc, ich denke, es sollte funktionieren. Application_Start hat das Problem der manchmal ausgelöst, bevor der debugger anfügen können, als Sie darauf hingewiesen.
Verwenden Sie IIS-oder Entwicklungs-Web-Server? Im Falle des IIS, dieser Artikel vorschlagen, dass Sie brauchen, um es zu schaffen, als eine Anwendung zum ersten mal.