15. august 2006 - 16:35Der er
19 kommentarer og 1 løsning
Session får hurtig timeout (kapasitet?)
Jeg bruger session variabler til at holde styr på brugerne på et admin site. Da jeg i sin tid gik igang hældte jeg alt muligt i (incl et dataTable) hvilket resulterede i at folk blev logget ud inden for meget få minutter, og det virkede som om det var lige meget hvor meget siderne blev brugt, session'en blev pludselig til null
Jeg fjernede dataTable (efter at ha læst hvordan det fungere, med at allokere meget mere hukommelse end det bruger) og det hjalp både på hastigheden og på at den ikke logger ud så hurtigt. Set i bakspejlet giver det vist også meget god mening.
Jeg bruger stadig min sessionvariabel til at indeholde en klasse jeg har lavet, men jeg har dog stadig problemer med at den mister session hurtigt. Jeg har lavet et eksempel på hvor jeg tæller op på hvad der ligger, og er blevet lidt overrasket.
Jeg er ved at strippe den fuldstændig for at se om ikke det hjælper, men jeg er blevet lidt nervøs for hvad man kan putte i sine sessions hvis det er korrekt at serveren kan smidde ens session hvis der er meget traffik, eller dens ram er fyldt godt op.
Så spørgsmålet er egentligt, kan det passe at det er det der sker? Og findes der nogen gode programmer til at overvåge sådan noget her (forbrug af ressourcer ect)?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Der er bunker af årsager til at din session - sådan som den er sat op pr. default - går fløjten. Hvis du ønsker at lave en applikation der er afhængig af session state, og som du ønsker fungerer pålideligt, er standardopsætningen ikke noget synderligt værd. Dine sessiondata ryger sig en tur, hvis din applikation genstarter, hvilket de kan være flere årsager til. Du har til gengæld fine muligheder for at gemme dine sessiondata så de ikke forsvinder når din applikation genstarter. Du kan oprette en stateserver, hvor sessiondata gemmes i memory. Det er knap så hurtigt som standardopsætning (hvor session data bliver gemet in-process), men til gengæld vil dine sessiondata ikke gå tabt, selvom din webapplikation genstarter (men de ryger self. hvis processen på stateserveren nedlægges af den ene eller anden årsag). Du har også mulighed for at gemme dine sessiondata på en sql-server, hvilket giver den største sikkerhed for at de bevares. Mvh
Det er bare så uheldigt at jeg ikke har nogen som helst mulighed for at ændre min sessionstate (begrænsning fra webserver) Det skal siges at siden skal flyttes over på en virtuel server, så det er mere eller mindre midlertidigt. På nuværende tidspunkt har jeg noget der ligner 2 bool værdier, 3 int værdier og en trimmet ArrayList på en 16 enties af en custom datatype.
Jeg bruger mine sessions til at holde styr på bl.a. userid og siteid, som bliver hentet temmelig ofte. Så hvis ikke det skal være en session, hvad er alternativet så? Det skulle jo gerne være noget der ikke helt dræber hastigheden, går ud fra cookies er ret langsomme, samt at det ikke er alle der understøtter dem?
Kort om 2.0.... Hmmm.... Det må blive: "Se at få konverteret" ;o)
Jeg synes du skal starte med at prøve at finde ud af hvad der sker. Du kan bruge det her til at komme igang på. http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx Du kan jo evt. checke om du må skrive til - og læse fra eventloggen, og ellers må du lave rutinen om så du får informationerne andetsteds. Bemærk at det er kendt at visse antivirus programmer går ind og piller ved ens filer, hvilket kan afstedkomme at din applicationdomain bliver reloaded (hvilket så pr. default medfører at du mister din session).
Hej igen. Det ser rigtigt fedt ud. Jeg har lige lavet det, og kører jeg det lokalt logger den det i en database så snart jeg ændre noget i fx bin biblioteket...
however...når jeg uploader det sker der intet...ændre jeg i min web.config går systemet ned og jeg skal genuploade mine bin filer før det kører igen, men intet bliver logget overhovedet.
Jeg har derfor prøvet at logge Application_start,_end,_beginreq og _Endreq
Jeg kan logge start, begin req og end req. Hvis jeg ændre i bin mappen får jeg start app,begin_req,end_req men jeg får aldrig en end app
Er det muligt for webserveren at slå Application_End fra ?
Må jeg se din kode ... det lyder mere som om det er selve den kode du har skrevet der går i hegnet... Kan ikke se hvorfor din app skulle gå ned ellers. Mvh
DatabaseConnection.DBConn DB = new DatabaseConnection.DBConn(System.Configuration.ConfigurationSettings.AppSettings["connectionMain"]); DB.Open(); DB.ExecuteQuery("Insert into SystemNotifications (Dato,Module,Text,SiteId) values(@D,'App End!',@Text,-1)",new String[]{"@D","@Text"},AL); DB.Close(); DB.Dispose();
Hvor database klassen: private System.Data.SqlClient.SqlConnection Conn; private String _ConnString; public DBConn(String ConnString) { _ConnString = ConnString; Conn = new System.Data.SqlClient.SqlConnection(ConnString); }
public void ExecuteQuery(String Sql, String[] Parameters, System.Collections.ArrayList Values) { System.Data.SqlClient.SqlCommand myCommand = new System.Data.SqlClient.SqlCommand(Sql, Conn);
Hmm...nada...kan ikke få noget som helst til at ske i App_End. Jeg ligger pt hos surftown (som jeg er ved at løbe skrigende væk fra) men skifter til en virtuel server snart. Jeg vil i den forbindelse konvertere til 2.0, så hvis jeg har samme problem der, hvad ville du så foreslå jeg gjorde med mine sessions? (bare nogen keywords, så googler jeg det)
Det kommer an på hvad du gemmer... Hvis du gerne vil have en database persistering foræret kan du benytte profiles. .... Det er ikke helt fuldstændig usansynligt at din host har slået muligheden for reflection fra - og at koden derfor ikke funger. Mvh
Det ser rigtigt fedt ud med profile. Jeg går ud fra man smidder værdierne i når en bruger logger ind, og så følger de ham, mens han/hun er på sitet...Hvordan ser det ud hvis man ligger arraylist, eller ens egene datatyper ned i den? Er det langsomt, eller mærker man det ikke?
De følger en længere end det ... Det bliver gemt i aspnet databasen (med mindre du selv specificerer anden). Du kan bruge de typer du vil - de skal bare kunne serialiseres, og ja.... Hvad performance angår er faciliteten ikke gratis, men sådan er det jo :o) Mvh
Hov. Har lige opdaget den her er åben...Vi har rykket server (men kører stadig 1.1)
Jeg forsøger mig med en state server, men har jeg ret i at når jeg har min egen klasse, som kun indeholder int og String, så ville det være hurtigere at smidde klassen ud, og så gemme dem i forskellige statevariabler?
Bare iorden... Nu kan du jo også sætte en sql-server op som stateserver... Det er den mest robuste løsning, men self. ikke lige så hurtigt som hvis du holder din state in-proc (som er default). Mvh
Skal lige høre til sidst...hvor ofte køre en state server ned? (det er selvfølgeligt ikke til at sige præcist, men er det ikke-så-tit-som-inProc, eller er det sjældent)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.