Cache e WebService

venerdì 13 giugno 2008 - 12.20

hexstudy Profilo | Newbie

Ho un problema. Io ho un applicativo Web che contiene un WebService con cui ci interfacciamo con programmi Forms.

Questo webservice ha la necissità di autenticare l'utente prima di lavorare, tramite una funzione che ritorna un SessionID, con questo sessionID vengono memorizzate nella chace alcune informazioni.

Questo SessionID viene sempre spedito con le altre funzioni utilizzate per identificare l'utente, la cache ha la scadenza di un giorno successivo a quello dell'operazione.

Il problema è che capita molto frequentemente che il WebService non riconosca più l'utente dopo la seconda operazione come se la SessionID non esistesse più all'interno della cache.

Sapete se c'è un motivo particolare per questo problema e se c'è modo di risolverlo?

Una cosa che mi è venuta in mente è quello di utilizzare un SoapHeader per effettuare ogni volta un login per ogni operazione andando così a abbandonare l'utilizzo della Cache, ma questo mi comporterebbe la modifica del WebService e dell'applicativo che lo usa.


Attendo vostre risposte

Grazie in anticipo a chiunque mi possa aiutare.

Wamba Profilo | Expert

Ciao e Benvenuto,
per cache intendi sul browser o sul server?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

hexstudy Profilo | Newbie

Scusa avevo dimenticato.

System.Web.Caching.Cache Cache = HttpRuntime.Cache;

Quindi Cache Server o sbaglio??

Wamba Profilo | Expert

No, dici giusto . L'ho chiesto per essere sicuro che parlassimo della stessa cosa.
Temo che il problema sia proprio li. La cache è una memoria strana, i dati possono essere rimossi dal server stesso se no ha più spazio.
Per sicurezza su la diagnosi prova ad usare l'application al posto della cache. Se funziona tutto devi rivedere il modo con cui imposti le variavili cache.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

hexstudy Profilo | Newbie

Ma non è pericoloso scrivere all'interno della application?? Non rischia di diventare troppo grossa e rallentare tutto??

Sai qualche altro metodo alternativo?

Grazie mille

Wamba Profilo | Expert

Certo hai ragione , ma è solo per fare una prova momentanea sul server di sviluppo.
Se con l'application funziona: il problema è come aggiungi le variabili in cache, in quel caso controlliamo come fai e proviamo a correggerlo. Ma continuerai a lavorare con la cache.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

hexstudy Profilo | Newbie

Il problema è che non succede in debug oppure sul mio pc da sviluppo ma sul server dove risiede l'applicazione. E fare questa prova mi richiederebbe un pò di tempo, anche xkè ovviamente appena aggiorno l'applicazione non succede subito ma dopo poco più di una giornata di lavoro.

Non sai come poter verificare in altro modo? Ad esempio come si può verificare lo stato della dimensione della Cache e vedere qual'è la sua dimensione massima?? Sono impostazioni da Web.Config??

Se mi dici che devo per forza fare questa prova, la faccio così lunedì mattina ho il responso.

Wamba Profilo | Expert

Mi basta l'ultimo tuo messaggio. Il fatto che non si presenti il problema sulla tua macchina o sul server di sviluppo significa che il server dopo aver saturato la ram fa pulizia per recuperare risorse.
Normalmente la cache non dovrebbe durare così tanto, nel tuo caso è un giorno se non ricordo male, puoi pensare si salvare i dati sul db, ma questo rallenterebbe la tua applicazione oppure... mi hai fatto venire un'ideuzza:
Puoi sfruttare il parametro onRemoveCallback della funzione add della cache: http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add.aspx.
Questo parametro accetta un delegato (ovvero un puntatore a funzione) da richiamare quando la cache viene rimossa.
Quando e solo quando la variabile cache viene rimossa puoi andare a salvarla nel DB. Questo libera risorse ram, che nel tuo caso sono preziose.
Alla bisogna se non trovi la variaible cache puoi andare a pescare i tuoi valori nel DB e se vuoi cancellandoli dopo la lettura.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

hexstudy Profilo | Newbie

Bravo e li ti voglio...

Avevo già pensato di controllare quando quelle Chiavi nella cache venivano eliminate ma senza alcun risultato sembrano letteralmente sparire senza dare nessun evento.

Io non so che fare

Considera che però la mia cache contiene solo le sessioni effettuate tramite WS con scadenza 1gg.

Ci lavorano al massimo per ora 4 utenti via WS

Wamba Profilo | Expert

mmm, non credo che la cache abbia una funzionalità particolare in questo caso.
Fai una prova in locale mettendo la scadenza della cache a 1/3 minuti e guarda se ti chiama il delegato.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

hexstudy Profilo | Newbie

Ho messo la scadenza a 5 secondi e
Key: soap.session.user.9bef6dc1-4469-450b-9a96-83c346d07965 Value: 00000000-0000-0000-0000-000000000001 Reason: Expired

Ma con questo cosa vuoi verificare?

Wamba Profilo | Expert

Volevo verificare che parta la chiamata al delegato. A questo punto c'è da capire perchè non parte sul server.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5