Avatar billede c-sharp Nybegynder
15. februar 2007 - 10:04 Der er 25 kommentarer og
1 løsning

Problem med stateserver (Session) og ICallBackEventHandler

Jeg har lavet en realtime progressbar på et site, det hele spiller fint når jeg køre mine sessioner i InProc mode. Nu er der så kommet et krav til løsningen af den skal bruges Session ved hjælp af stateserver og så virker min progressbar ikke mere. Hvordan kan jeg om gå dette?

Jeg bruger sessioner i forbinbdels med ICallBackEventhandler til at gemme diverse variabler.
Avatar billede kalp Novice
15. februar 2007 - 10:16 #1
ved ikke helt præcist om du har inddraget dine egne klasser, men har en kommentar og måske kan det give dig noget og hvis ikke så ignorere du den bare:)

Når du arbejder med InProc gemmes oplysninger "In Memory" altså i hukommelsen, men skifter du til stateserver skal det gemmes på disc.
Derfor skal dine klasser (hvis du prøver at gemme sådan noget)
markeres som [Serializable]
Avatar billede kalp Novice
15. februar 2007 - 10:18 #2
Tjek evt. om ProgressBar er serializable.. og ellers har du fundet dit problem.
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 10:21 #3
Hvordan ser din kode ud ?
Avatar billede c-sharp Nybegynder
15. februar 2007 - 10:39 #4
Der er ret meget kode :-)

Men jeg bruger kun session til tal og ingen klasser, dvs.

Session["test"] = 10;
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 11:08 #5
Hvor forsøger du hente værdien af test ud ?
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 11:13 #6
Har du kigget på denne artikel
http://msdn2.microsoft.com/en-us/library/ms178586.aspx ?
Du skal sikre dig at state serveren er sat ordentligt op og
systemroot\Microsoft.NET\Framework\versionNumber\aspnet_state.exe skal kører.
Avatar billede c-sharp Nybegynder
15. februar 2007 - 11:26 #7
Jeg sætter en session for hvert gennemløb af en løkke (i den metode der udføre arbejdet) den session henter jeg så i "string ICallbackEventHandler.GetCallbackResult()".

Jeg bruger session's mange andre steder i min løsning og der virker det fint.

Fandt iøvrigt denne artikle som også laver noget AJAX halløj http://www.codeproject.com/Ajax/magicajax.asp

Der står at det ikke virker med Stateserver, men der må da være en måde man kan omgå det?

Der står at det ikke virker
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 11:33 #8
Så er det sikkert fordi at session state på siden ikke bliver opdateret,
kunne jeg forestille mig.
Sender du værdien af session tilbage til siden med icallback ?
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 11:34 #9
Sætter du session værdien i forbindelse med et callback fra din side ?
Avatar billede c-sharp Nybegynder
15. februar 2007 - 11:54 #10
Nej værdien på session bliver ikke sat i forbindelse med callback. værdien  bliver returneret i forbindelse med callback (eks. 25 for at processen er nået 25%)
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 12:31 #11
Prøv at udskrive værdien i din call back og se om den ændre sig der.
Altså efter du har sat den.
Jeg formoder at du sender et callback fra siden med et bestemt interval for at finde ud af hvor langt dit "job" er noget i så sætter du en % værdi og siden modtager svar fra serveren opdaterer du din progress bar med javascript.
Er det en nogenlunde rigtig antagelse ?
Virker dine sessioner andre steder med clientscript callback ?
Avatar billede c-sharp Nybegynder
15. februar 2007 - 13:35 #12
Når jeg debugger på projektet er min session nulstillet hvergang jeg kommer ind i callback, uden for den funktion fungere det fint...

Din formodning er korrekt :-)

Nej mine sessioner (StateServer) virker ikke andre steder med Callback.
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 16:54 #13
Ok.
Utroligt hvad man kan gætte sig til.

Du skal sende dine værdier tilbage til siden via javascript og så bruge en delimiter til at hente hvad der er relevant ud og vise det.
Jeg gætter på at du beregner progress i din codebehind.
Avatar billede c-sharp Nybegynder
15. februar 2007 - 18:02 #14
Det er så også det jeg gør, men mit problem er at mine session'er ikke holder værdierne når jeg bruger StateServer.
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 18:14 #15
Hvad bruger du sessions til  altså hvad gemmer du præcist i dem?
Avatar billede c-sharp Nybegynder
15. februar 2007 - 19:33 #16
Jeg starter en metoden der skal udføre arbejdet asynkront, for at den så kan kommunikere med mit CallBack fra front-end er jeg nødtil at bruge en session.

private IAsyncResult DoJobAsync()
    {
        DoJobDelegate doDelegate = new DoJobDelegate(MinMetodeDerUdføreArbejdet);
        IAsyncResult ar = doDelegate.BeginInvoke(new AsyncCallback(MyCallback), null);
        return ar;
    }
Avatar billede dr_chaos Nybegynder
15. februar 2007 - 20:01 #17
Har du prøvet at bruge cache ?
Avatar billede c-sharp Nybegynder
16. februar 2007 - 06:08 #18
Hvis jeg burger cache virker det :)

Men Cache er jo global så hvis der er flere der benytter siden med progressbaren på samme tid vil der jo gå ged i det.
Avatar billede dr_chaos Nybegynder
16. februar 2007 - 09:47 #19
du skal bare bruge en unique cache værdi.
f.eks.
Cache["test"+HttpContext.Current.User.Identity.Name]= din værdi;
Avatar billede c-sharp Nybegynder
16. februar 2007 - 11:58 #20
Når man så laver den  lille finte så går det galt igen, for i min callback metode til min asynkrone metode er HttpContext.Current.User.Identity.Name = null.
Avatar billede dr_chaos Nybegynder
16. februar 2007 - 12:28 #21
hmm Det skal sgu ikke være nemt.
Bruger du profile ?
Hvis jeg så prøv med username derfra.
Avatar billede dr_chaos Nybegynder
16. februar 2007 - 12:29 #22
hvis ja even.
Avatar billede c-sharp Nybegynder
26. februar 2007 - 12:26 #23
Hov havde ikke lige set din sidste kommentar :)

Hvad mener du med "profile"?
Avatar billede c-sharp Nybegynder
12. december 2007 - 13:32 #25
fandt aldrig en løsning.
dr_chaos smid et svar så er der point for alle dine forslag
Avatar billede dr_chaos Nybegynder
12. december 2007 - 18:41 #26
svar :)
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