webForumDet fria alternativet

Angående Session_onEnd i global.asa

7 svar · 1 022 visningar · startad av OveRRidE

OveRRidEMedlem sedan feb. 200112 078 inlägg
#1

OBS! Tråden är redigerad ett antal gånger pga. infouppdateringar. Se noteringar längst ner i tråden. :)

Jag har under min tid i forumet märkt att många har problem att få funktioner såsom utloggningar och statistikfunktioner att fungera i Session_onEnd (eller i Application_onEnd heller. Tillagt 2003-12-17) i global.asa. Och eftersom global.asa inte ger nåt felmeddelande, kan det vara mycket svårt att felsöka denna fil, vilket är förståeligt.

Jag kan ha hittat en lösning på detta, speciellt i samband med de problem som relateras med databas-händelser i Session_onEnd eller Application_onEnd.

Följande finns att läsa på MSDN, i referensen för global.asa:

MSDN skrev:

Remarks

You cannot call the Server.MapPath method in the Session_OnEnd script. By default, Session_OnEnd runs as the Anonymous User, as defined for the application. In the event that there isn't an Anonymous user, or the Logon for the Anonymous user fails, the OnEnd function will not be called, and an event will be logged.

Som texten utläser, går det alltså inte att använda mappath-metoden i session_onEnd. Alltså, se till att t.ex. lagra en fysisk sökväg till databasen i exempelvis en applicationvariabel som hårdkodas in i global.asa:s funktion Application_OnStart:

sub Application_OnStart
    application("strConn") = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" & [red]server.mappath("/data/data.mdb")[/red]
end sub

sub Application_OnEnd
end sub

sub Session_OnStart
end sub

sub Session_OnEnd
   'gör nåt skoj
   'här kan du använda application("strConn") eftersom sökvägen 
   'redan är fysisk, sedan vi använt mappath i [i]onStart[/i]. 
end sub

---
RED1: Ni som är osäkra på global.asa kan läsa mer om den i mitt aningen överambitiösa inlägg här eller här.
RED2: För er som inte vet vad mapPath-metoden gör, kan jag förklara att den omvandlar en virtuell sökväg till en fysisk för att kunna använda denna i t.ex. kopplingssträngar i databaskopplingar. Sökvägen '/data/data.mdb' blir således t.ex. 'c:\inetpub\wwwroot\data\data.mdb' om den körs igenom server.mappath(). Läs mer här. :stud :)
RED3, 2003-12-17: Jag har nu grävt lite till i detta ämne och uppdaterat tråden med bland annat en anledning till varför inte Server.MapPath inte går att använda i Session- eller Application_OnEnd, vilket inte framgick i den andra länken. MSDN har flyttat om, så jag fick länka om alla länkar dit igen. :p
RED4: Viktigt att komma ihåg är att i händelse av misslyckande med anrop av denna metod, så loggas felet i Event-loggen i Windows, som texten ovan utröner. Länk till referens för global.asa finner ni här.
RED5: Jag hittade en (för vissa) intressant tråd om Debugging i global.asa. Kanske kan vara något att ha? Utgår ifrån VS.NET, dock.

VideMedlem sedan dec. 19998 577 inlägg
#2

Bra undersökning där OveRRidE... :)

En annan sak som kan hjälpa om man har tillgång till sin egna server är att kolla felmeddelanden som Session_onEnd skulle generera i "Application Log" i event viewer, där hamnar dessa felmeddelanden så att man sedan kan debugga...

Mvh, Vide

m_soderlundMedlem sedan sep. 20026 425 inlägg
#3

Mycket bra Override.. Sådana här inlägg vill vi ha! Mycket bra!

OveRRidEMedlem sedan feb. 200112 078 inlägg
#4

Vide, det är korrekt. Problemet är att alla våra webbhotellshyrtagare, ínte alltid har tillgång till loggarna på maskinen. :)

VideMedlem sedan dec. 19998 577 inlägg
#5

Sant... hmm... vore inte en lösning på det att i Session_onend köra "on error resume next" och sedan hämtar man och lagrar felkoden i t.ex en databas eller en applikationsvariabel...

...funderar vidare...

LR^evil.sidMedlem sedan maj 2002560 inlägg
#6

Vide skrev:

Sant... hmm... vore inte en lösning på det att i Session_onend köra "on error resume next" och sedan hämtar man och lagrar felkoden i t.ex en databas eller en applikationsvariabel...

...funderar vidare...

Det är inte alltid det fungerar. På brinkster t.ex. får du inte använda "on error resume next". Då får du något felmeddelande när du laddar upp filen.

VideMedlem sedan dec. 19998 577 inlägg
#7

Nä, det är ju svårt att göra sånt på begränsade servrar.

Men en univerallösning borde ju vara att via en komponent hämta felmeddelanden ifrån "Application Log" på servern.

Men det kräver ju som vanligt att man måste ha tillgång till server.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#8

-bump-

Jag tar upp denna tråd igen eftersom jag gjort uppdateringar som kan vara värda att uppmärksamma för de som inte sett det innan.

130 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)