Eccezione incompresa: ViewState non valido [attenzione lungo]

sabato 14 giugno 2008 - 15.37

nullatore Profilo | Junior Member

Salve gente,
sto da un pò di tempo tenendo d'occhio le eccezioni che la mia webapplication solleva. Ce ne sono 2 a cui non sono proprio riuscito ancora a dare una risposta! Per pulizia del post ne riporto solo una. La seconda la propongo in un altro post.
Potete buttargli un'occhio?
Grazie!

----------ECCEZIONE N.1-------------------

System.Web.HttpException: Client disconnesso.
<INNER EXCETION>
System.Web.UI.ViewStateException: Viewstate non valido.
Client IP: 87.6.227.77
Port: 25643
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2)
ViewState: /wEPDw[....elimino una parte per praticità....]8GAgJ... ---> System.FormatException: Carattere non valido in una stringa Base 64.
in System.Convert.FromBase64String(String s)
in System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
in System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState)
in System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
in System.Web.UI.HiddenFieldPageStatePersister.Load()
--- Fine dell'analisi dello stack dell'eccezione interna ---

Alcuni commento che potrebbero essere utili:
-questa eccezione viene generata sempre dallo stesso utente che lavora in un'area riservata (dietro FormsAuthentication) (a cui sono risalito tramite IP), sempre dallo stesso IP e sempre dallo stesso UserAgent
-viene sollevata sempra dalla stessa pagina .aspx
-non viene sollevata ognivolta che viene lanciata la pagina .aspx in questione (per ora occorre con tempi randomici)
-nella pagina non faccio utilizzo deliberato del ViewState
-il viewstate che viene riportato nell'exception è sempre lo stesso o al massimo si alterna ad un altro (anch'esso ricorrente).
- questa eccezione - diversamente dalle altre - non scatena un redirect alla pagine che ho definito nel Web.config, al nodo <customErrors> bensi sembrerebbe "consumarsi" nell'Application_Error (da dove prelevo l'eccezione e la trascrivo nel mio file degli errori)
-l'utente in questione non mi ha mai riportato alcun problema su questa pagina.
- nella pagina .aspx incriminata, e precisamente nell'OnLoad del codebehind (e per ogni postback) inserisco un META TAG di refresh (ogni 5 min).

riporto il codice
{
HtmlMeta refrsh = new HtmlMeta();
refrsh.HttpEquiv = "refresh";
refrsh.Content = "300";
this.Page.Header.Controls.Add(refrsh);
}





~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

Ciao,

hai già verificato che non sia dovuto ad uno dei casi citati qui: http://support.microsoft.com/kb/555353 ?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

nullatore Profilo | Junior Member

http://support.microsoft.com/kb/555353 riporta questa interessante situazione:

"Il pool di applicazioni che si ricicla"
[IIS 6 riciclerà periodicamente il pool di applicazioni per mantenere l'integrità del pool di applicazioni. All'istanza, quando si ricicla il pool di applicazioni, le richieste di browser possono generare talvolta un errore viewstate non valido. In questo caso, la correzione è regolare le impostazioni dei pool di applicazioni in modo che sia meno probabile che riciclare si sia verificato agli intervalli massimi. Questo problema rappresenta un errore poiché il pool di applicazioni deve gestire questa condizione correttamente.]

Che ne pensi?
Visto nella pagina è impostato un refresh automatico lato cliente (ogni 5 min tramite meta tag) e visto che l'utente potrebbe lasciare questa pagina in 'ascolto' anche per svariati minuti o ore della giornata, potrebbe ricadere in questo "Reciclo della Applicazioni"?


~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

Si sicuramente può essere quello.
E' capitato più volte anche a me. Controlla le impostazioni del pool e magari prova a verificare il comportamento del cliente. Io in questi casi imposto un riciclo automatico ad una certa ora della notte e tolgo quello ogni xx minuti. In questo modo se vedo che l'errore avviene in un orario vicino a quello di riciclo capisco subito che si tratta di quello.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

nullatore Profilo | Junior Member

>Si sicuramente può essere quello.
>E' capitato più volte anche a me. Controlla le impostazioni del
>pool e magari prova a verificare il comportamento del cliente.
>Io in questi casi imposto un riciclo automatico ad una certa
>ora della notte e tolgo quello ogni xx minuti. In questo modo
>se vedo che l'errore avviene in un orario vicino a quello di
>riciclo capisco subito che si tratta di quello.
>-----------------------------------------
>Rossi Marco
>http://blogs.dotnethell.it/rossimarko

Una manciata di domande:

Dove trovo le impostazioni del pool?
Quale aspetto del comportamento del cliente dovrei tenere sott'occhio?
E cosa perdo se riduco i recicli del pool?

~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

>Dove trovo le impostazioni del pool?

All'interno di IIS 6, c'è una cartella Application Pools con l'elenco. Se vuoi vedere le proprietà hai la relativa voce sul menu che compare premendo il tasto destro.
Prima comunque devi controllare nelle proprietà della virtual o del tuo sito quale application pool è stato associato. Se è quello di default io ti consiglio di crearne un altro che sia utilizzato esclusivamente dal tuo sito, così lo puoi modificare a tuo piacimento.

>Quale aspetto del comportamento del cliente dovrei tenere sott'occhio?
Se hai modo di raggiungerlo (via mail o telefonicamente) potresti chiedere se è sua abitudine lasciare aperto il browser tutto il giorno, giusto per avere una conferma

>E cosa perdo se riduco i recicli del pool?

Non perdi niente, il riciclo non fa altro che far ripartire il pool, così da liberare tutta la memoria usata. L'unico inconveniente è appunto che tutte le operazioni in corso vengono azzerate, è per quello che di solito si pianifica di notte.

Se ti servono maggiori informazioni sui pool: http://www.microsoft.com/italy/technet/community/mvp/editoriali/iis6.mspx

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

nullatore Profilo | Junior Member

>>Dove trovo le impostazioni del pool?
>
>All'interno di IIS 6, c'è una cartella Application Pools con
>l'elenco. Se vuoi vedere le proprietà hai la relativa voce sul
>menu che compare premendo il tasto destro.
>Prima comunque devi controllare nelle proprietà della virtual
>o del tuo sito quale application pool è stato associato. Se è
>quello di default io ti consiglio di crearne un altro che sia
>utilizzato esclusivamente dal tuo sito, così lo puoi modificare
>a tuo piacimento.
>

Ok. Il server di deploy è una macchina dove non ho accesso (hoster esterno). Quindi penso che non posso fare nulla...

>>Quale aspetto del comportamento del cliente dovrei tenere sott'occhio?
>Se hai modo di raggiungerlo (via mail o telefonicamente) potresti
>chiedere se è sua abitudine lasciare aperto il browser tutto
>il giorno, giusto per avere una conferma
>

Sì, il cliente lascia aperto il browswer quasi tutta la giornata, e l'90% di essa sulla pagina incriminata.

>>E cosa perdo se riduco i recicli del pool?
>
>Non perdi niente, il riciclo non fa altro che far ripartire il
>pool, così da liberare tutta la memoria usata. L'unico inconveniente
>è appunto che tutte le operazioni in corso vengono azzerate,
>è per quello che di solito si pianifica di notte.
>

Strano però...questo inconveniente capita solo di giorno in orari lavorativi


~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

>
>Strano però...questo inconveniente capita solo di giorno in orari
>lavorativi
>

Scusami, mi sono spiegato male. Di default il pool non si ricicla di notte ma dopo XX minuti di attività. Intendevo dire che io di solito lo imposto perchè si ricicli di notte per creare meno disservizi agli utenti.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

nitrev Profilo | Newbie

credo dipenda dal user agent. Si verifica solo con safari merd. Confermate?
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5