System.Web.UI.ViewStateException : Viewstate non valido

giovedì 16 ottobre 2008 - 13.27

nullatore Profilo | Junior Member

Salve gente,
avrei bisogno di un vostro parere.

Ho da tempo pubblicato una webapplication la quale mi traccia ogni tanto una System.Web.UI.ViewStateException - Viewstate non valido.

Dopo un modesto periodo di osservazione ho notato che (per ora) le uniche pagine che sollevano questa eccezione risultano avere il viewstate di dimensioni notevoli.
Una in particolare presenta un un ViewState (inteso come campo hidden del html)di 110KByte e la pagina in totale pesa 853KByte
(in questa pagina viene utilizzato un TreeView con molti nodi)

Queste le mie domande:
-esiste un nesso tra dimensione pagina/viewstate e questa tipo di eccezione?
-ci sono dei limiti per il viewstate che non si dovrebbero o devono superare?

Ho cercato anche in giro informazioni e l'unica cosa plausibile sembrerebbe un recliclo dell'application pool che portebbe portare a questo inconveniente; ma possibile sempre con le stesse pagine?

Grazie

nullatore

~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

Ciao,

che tu sappia quelle pagine vengono lasciate aperte per molto tempo?
Come hai detto te può capitare quando l'application pool viene riciclato oppure quando viene spento dopo x minuti di inattività.

Un'altra cosa che può capitare è che ci siano problemi di linea e quindi non viene fatto il post correttamente di tutto il viewstate

Avevi già visto questo articolo? http://support.microsoft.com/kb/555353

Si parla anche di server farm con configurazioni cluster, non so se è il tuo caso
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

PEPE Profilo | Senior Member

Se non ricordo male ci dovrebbe essere una proprietà che configura la grandezza del viewstate, maxPageStateFieldLength.

Credo che il tuo problema dipenda proprio dalla grandezza eccessiva del viewstate.
Comunque dovresti vedere se tutti i tuoi oggetti della tua web form hanno necessariamente bisogno del viewstate. Generalmente lo si lascia sempre a true...anche quando non serve :D.
A me è capitato con gridView enormi, in pagine che non avevano postback ma al massimo solo redirect.

Saluti,
Luca.

nullatore Profilo | Junior Member

>Ciao,
>
>che tu sappia quelle pagine vengono lasciate aperte per molto
>tempo?
>Come hai detto te può capitare quando l'application pool viene
>riciclato oppure quando viene spento dopo x minuti di inattività.
>
>Un'altra cosa che può capitare è che ci siano problemi di linea
>e quindi non viene fatto il post correttamente di tutto il viewstate
>
>Avevi già visto questo articolo? http://support.microsoft.com/kb/555353
>
>Si parla anche di server farm con configurazioni cluster, non
>so se è il tuo caso
>-----------------------------------------
>Rossi Marco
>http://blogs.dotnethell.it/rossimarko


Si devo dire che una di queste 2 pagine è mantenuta aperta per molto tempo mentre la seconda non so.
Ma nel caso cosa potrei fare per evitarlo? Sai l'utente finale non so quanto può apprezzare la storia dell'application pool...lui vede solo un errore...

P.s.Ho letto l'articolo...non credo sia un problema di server farm (boh l'application gia in hosting...)

~nullatore~
mai dire corto circuito virtuale

nullatore Profilo | Junior Member

>Se non ricordo male ci dovrebbe essere una proprietà che configura
>la grandezza del viewstate, maxPageStateFieldLength.
>
>Credo che il tuo problema dipenda proprio dalla grandezza eccessiva
>del viewstate.
>Comunque dovresti vedere se tutti i tuoi oggetti della tua web
>form hanno necessariamente bisogno del viewstate. Generalmente
>lo si lascia sempre a true...anche quando non serve :D.
>A me è capitato con gridView enormi, in pagine che non avevano
>postback ma al massimo solo redirect.
>
>Saluti,
>Luca.

Ma se fosse solo un problema di grandezza ,visto che la pagina è sempre della stessa dimensione, non dovrei ottenere SEMPRE l'errore?


~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

>Si devo dire che una di queste 2 pagine è mantenuta aperta per
>molto tempo mentre la seconda non so.
>Ma nel caso cosa potrei fare per evitarlo? Sai l'utente finale
>non so quanto può apprezzare la storia dell'application pool...lui
>vede solo un errore...
>
>P.s.Ho letto l'articolo...non credo sia un problema di server
>farm (boh l'application gia in hosting...)
>
>~nullatore~
>mai dire corto circuito virtuale

Visto che è in hosting tu hai la possibilità di modificare le caratteristiche dell'application pool per fare qualche prova? Di solito viene fatto lo shutdown del pool dopo 20 minuti di inattività.

A grandi linee cosa fanno le due pagine? Quella che viene tenuta aperta molto tempo prevede dei refresh automatici? Potrebbe essere un'idea quella di fare un refresh ogni tot minuti per mantenere attiva la sessione...
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

nullatore Profilo | Junior Member

>Visto che è in hosting tu hai la possibilità di modificare le
>caratteristiche dell'application pool per fare qualche prova?
>Di solito viene fatto lo shutdown del pool dopo 20 minuti di
>inattività.

Beh potrei chiedere con un ticket la cosa ma non sono sicuro...

>A grandi linee cosa fanno le due pagine? Quella che viene tenuta
>aperta molto tempo prevede dei refresh automatici? Potrebbe essere
>un'idea quella di fare un refresh ogni tot minuti per mantenere
>attiva la sessione...

Quella che viene tenuta aperta per molto tempo prevede già un refresh automatico (tramite meta tag refresh) ogni 5 min, quindi non credo sia un problema di shotdown dell app_pool (tanto meno la sessione che è impostata a 40 min)

Cmq la pagina che viene mantenuta aperta per molto tempo presenta una GridView (senza paging). Non sono presenti postback ma solo redirect ad altre pagine.
Mentre l'altra (la più grossa) ha un TreeView che è uno specchio di una porzione del filesistem del server (prelievo documenti).


~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

>Quella che viene tenuta aperta per molto tempo prevede già un
>refresh automatico (tramite meta tag refresh) ogni 5 min, quindi
>non credo sia un problema di shotdown dell app_pool (tanto meno
>la sessione che è impostata a 40 min)

Si allora direi che non dovrebbe essere quello il problema...

>Cmq la pagina che viene mantenuta aperta per molto tempo presenta
>una GridView (senza paging). Non sono presenti postback ma solo
>redirect ad altre pagine.

Per questa pagina hai già provato a disabilitare il viewstate? Se non fai dei post back non dovrebbe servirti.

>Mentre l'altra (la più grossa) ha un TreeView che è uno specchio
>di una porzione del filesistem del server (prelievo documenti).
>

In questo caso invece disabilitando il viewstate funziona ancora correttamente?

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

nullatore Profilo | Junior Member

>Per questa pagina hai già provato a disabilitare il viewstate?
>Se non fai dei post back non dovrebbe servirti.

Ho provato a levare il viewstate e dopo un paio di aggiusti la pagina sembra andare bene. Vediamo se ottengo errori ora...

>
>>Mentre l'altra (la più grossa) ha un TreeView che è uno specchio
>>di una porzione del filesistem del server (prelievo documenti).
>>
>
>In questo caso invece disabilitando il viewstate funziona ancora
>correttamente?
>

Questa invece senza il viewstate non funge in quanto ogni foglia dell'albero far scattare un postback (è un prelievo lato server del file).
Qui credo le soluzioni siano 2:
-riduco la larghezza e profondità dell'albero
-utilizzo ajax (anche se non l'ho mai ancora implementato)

Hai altre soluzioni?

~nullatore~
mai dire corto circuito virtuale

rossimarko Profilo | Guru

Una terza possibilità è quella di usare sempre ajax per mantenere il processo lato server sempre attivo. In pratica si può inserire un timer lato client che ogni xx secondi richiama una funzione lato server per mantenere il processo attivo.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

nullatore Profilo | Junior Member

Credo proprio che mi tocca imparare sto Ajax

Grazie per l'interessamento.





~nullatore~
mai dire corto circuito virtuale
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