Toon posts:

[ASP.NET] Database access binnen een global.asax file

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor mijn project heb ik de domein en data acces laag beide in een apparte assembly geplaats. De Domein laag heeft een referentie naar de data acces laag. De web applicatie heeft een referentie met de domein laag.

Binnen een global.asax file wil ik graag binnen een bepaalde event gegevens opslaan. naar een database.

binnen de Session_Start event heb ik een object (afkomstig van de domein laag) toegevoegd aan de Session object.

deze wordt weer uitgelezen uit de Session object in de Application_OnPostRequestHandlerExecute event. Met behulp van set methodes van dat object verander ik als het ware de gegevens. Na alle bewerkingen wil ik dit alles opslaan in een database. Dit gebeurt in principe als een sessie is geeindigd. Maar op te testen of alles werkt heb ik de source code in de Application_OnPostRequestHandlerExecute event geplaats. Deze zit er als volgt uit:

code:
1
2
    domein.IpAdres=Request.UserHostAddress;
    domein.Insert();


de Insert() methode roept een datamapper die verantwoordelijk is voor het opslaan van de gegevens. uiteraard heb ik de domein en data acces laag getest. Ik weet 100% zeker dat de Insert methode werkt (naast unit testen ook nog voor de zekerheid gekeken of het ook daadwerkelijk is opgeslagen binnen een database).

maar gek genoeg werkt het bovenstaande source code niet. er wordt namelijk niks opgeslagen. Omdat het niet werkte heb ik de source code geplaats in de Session_End event. de source code ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Session.Clear();
            Hashtable ht = (Hashtable)Application["SESSION_LIST"];
            
            IDictionaryEnumerator en = ht.GetEnumerator();
            while(en.MoveNext())
            {
                HttpSessionState session = (HttpSessionState)en.Value;
                if(session != null)
                {
                    Domein domein = (Visitor)session["USER_INFO_MAP"];
                    domein.Insert();
                }
            }
            //ht.Remove(Session.SessionID);


het bovenstaande werkt ook niet (heb nog geprobeerd te debuggen maar daar komt die hele debugger niet eens langs :S

het bovenstaande heb ik vervolgens in de Application_End event geplaats. daar werkt het namelijk wel. Mijn vraag is waar is dit zo?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Een sessie eindigt pas na 20 of 30 minuten, dus je kan eerst nog even een bakje koffie nemen terwijl de debugger aan staat?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op zaterdag 29 oktober 2005 @ 22:33:
Een sessie eindigt pas na 20 of 30 minuten, dus je kan eerst nog even een bakje koffie nemen terwijl de debugger aan staat?
oke best stom van mij 8)7 |:( |:( 8)7

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Session.Clear();
            Hashtable ht = (Hashtable)Application["SESSION_LIST"];
            
            IDictionaryEnumerator en = ht.GetEnumerator();
            while(en.MoveNext())
            {
                HttpSessionState session = (HttpSessionState)en.Value;
                if(session != null)
                {
                    Domein domein = (Domein)session["USER_INFO_MAP"];
                    domein.Insert();
                }
            }
            ht.Remove(Session.SessionID);


dus het bovenstaande code die geplaats wordt in de session_end event werkt gewoon alleen wordt deze na 30 min uitgevoerd? SessionID wordt ook gewoon netjes verwijderd? Maar ik snap nog steeds niet waarom er niks ingevoerd wordt in de Application_OnPostRequestHandlerExecute event.

maar goed het is wel duidelijk dat ik een aantal tutorials moet gaan volgen over sessies enzo :X