Avatar billede idiotbarn Nybegynder
15. august 2006 - 16:35 Der 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)?

MVH
Avatar billede snepnet Nybegynder
15. august 2006 - 19:33 #1
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
Avatar billede idiotbarn Nybegynder
15. august 2006 - 19:42 #2
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?
Avatar billede snepnet Nybegynder
15. august 2006 - 20:07 #3
Hvilken version af asp.net bruger du?
Mvh
Avatar billede idiotbarn Nybegynder
15. august 2006 - 21:21 #4
1.1 men du må meget gerne lige kort skrive om 2.0, jeg konvertere snart
Avatar billede snepnet Nybegynder
15. august 2006 - 21:39 #5
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).

Mvh
Avatar billede idiotbarn Nybegynder
16. august 2006 - 13:47 #6
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 ?
Avatar billede snepnet Nybegynder
16. august 2006 - 21:42 #7
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
Avatar billede idiotbarn Nybegynder
16. august 2006 - 22:10 #8
Går ud fra du mener i min asax fil. Den virker lokal...men here goes.


HttpRuntime runtime = (HttpRuntime) typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime",BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null);
            if (runtime == null) return;

            string shutDownMessage = (string) runtime.GetType().InvokeMember("_shutDownMessage",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null); 
            string shutDownStack = (string) runtime.GetType().InvokeMember("_shutDownStack",BindingFlags.NonPublic | BindingFlags.Instance| BindingFlags.GetField, null, runtime, null);
            ArrayList AL = new ArrayList(2);
            AL.Add(DateTime.Now);
            AL.Add(String.Format("<b>_shutDownMessage</b>={0}<br><br><b>_shutDownStack</b>={1}", shutDownMessage.Replace("\r\n","<br>"), shutDownStack.Replace("\r\n","<br>")));

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);
   
    for(int i=0;i<Parameters.Length;i++)
    {
        myCommand.Parameters.Add(Parameters[i],Values[i]);
    }
    myCommand.ExecuteNonQuery();
}
public void Open()
{
    Conn.Open();
}

public void Close()
{
    Conn.Close();
}
Avatar billede idiotbarn Nybegynder
16. august 2006 - 22:11 #9
øverste kode står i
protected void Application_End(Object sender, EventArgs e)
Avatar billede snepnet Nybegynder
16. august 2006 - 22:33 #10
Er du sikker på at din connectionstring holder efter upload?
Mvh
Avatar billede idiotbarn Nybegynder
16. august 2006 - 22:59 #11
ja...for det er den samme som jeg bruger de andre steder, jeg prøver lige at gøre det meget basalt i morgen, det skal kunne lade sig gøre...
Avatar billede idiotbarn Nybegynder
18. august 2006 - 14:50 #12
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)
Avatar billede snepnet Nybegynder
18. august 2006 - 20:34 #13
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
Avatar billede idiotbarn Nybegynder
21. august 2006 - 15:21 #14
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?
Avatar billede snepnet Nybegynder
21. august 2006 - 16:53 #15
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
Avatar billede idiotbarn Nybegynder
09. oktober 2006 - 19:12 #16
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?

Og undskyld det sene svar...
Avatar billede snepnet Nybegynder
10. oktober 2006 - 14:20 #17
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
Avatar billede idiotbarn Nybegynder
10. oktober 2006 - 14:24 #18
Ligger du et svar?

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)
Avatar billede snepnet Nybegynder
10. oktober 2006 - 14:49 #19
Som udgangspunkt skulle stateserveren jo ikke gerne gå ned med mindre du genstarter den.
Mvh
Avatar billede idiotbarn Nybegynder
10. oktober 2006 - 14:50 #20
Ok. Mange tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester