Hallo zusammen,
ich habe folgendes Problem:
Ich habe eine ASP.net Seite die eine Datenbankverbindung zu einer db4o Datenbank öffnet.
Beim Beenden, soll die Verbindung zu Datenbank geschlossen werden.
Ich habe versucht dies über die Funktion Application_End() in der Glabal.asax zu tun. Allerdings wird diese Funktion nie aufgerufen.
Wann wird dieses Event ausgelöst, bzw wie kann ich darauf reagieren?
Hi,
wenn Du über ADO.NET die Verbindung erstellst musst Du Dich eigentlich nicht drum kümmern.
Dass Application_End nicht aufgerufen wird ist gut möglich, da der Applikation Pool die Anwendung abschießt, wenn sie zu lange im Idle Modus ist.
Grüße
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt,
vielen Dank für Deine Antwort.
In diesem Fall ist es leider nicht so, dass die Verbindung automatisch geschlossen wird.
Gibt es andere Möglichkeiten darauf zu reagieren, wenn das Browserfenster geschlossen wird?
Der Browser meldet das schließen einer Webseite nicht ohne weiteres an den Server.
Vielleicht kannst du die Verbindung schließen, nachdem du sie benutzt hast?
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Der Browser meldet das schließen einer Webseite nicht ohne weiteres an den Server.
Vielleicht kannst du die Verbindung schließen, nachdem du sie benutzt hast?
Nicht Vieleicht, sondern genau so muss das gemacht werden.
ASP.NET (HTTP-Protokoll), ist ein Statusloses Protokoll. Das bedeutet, das ein Browser sich nie am Server abmeldet. Der Browser schickt nur eine Anfrage an den Server "Möchte Seite X sehen" und der Server schickt dann die Seite zurück.
Baue die Verbindung zur Datenbank so spät wie benötigt auf, und beende die Verbindung so schnell als möglich. Packe am besten den Code zur Abfrage in ein Using. Dann kümmert sich die CLR um den nötigen Close Befehl.
Grüße
Stephan
Hallo,
siehe zum Thema DB-Verbindungen auch [Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen
Das Application_End
-Event wird normalerweise gefeuert, wenn die Anwendung entladen wird (vom IIS), bzw. der Anwendungspool beendet wird.
Es gibt auch Events, die nach der Abarbeitung einer einzelnen Anfrage gefeuert werden. Aber die Datenbank solltest Du trotzdem nur bei Bedarf öffnen und gleich wieder schließen.
Ob ein Browserfenster noch offen ist, bekommst Du nicht zuverlässig mit - Man sollte bei Webanwendungen nie versuchen, das zu ermitteln um serverseitig zu reagieren. Es besteht in vielen Fällen auch kaum ein Unterschied zwischen "Fenster ist noch offen" und "Cookie ist noch da Fenster wird mit vorheriger URL neu geöffnet".
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca