Ormai tutti quanti abbiamo log4net nelle nostre applicazioni web che, ben piantato nel global.asax o in un error handler, ci avvisa di tutti i casi in cui la nostra applicazione va in errore. In una grossa applicazione che ho in produzione, mi capita da qualche mese di ricevere due errori che proprio non riuscivo a spiegarmi:
Invalid character in a Base-64 string e Unable to validate data (quest'ultimo lanciato dal metodo GetDecodedData()).
Mi sono girato in lungo ed in largo forum, applicativo e cliente per capire dove stesse il problema, ed è venuto fuori che nessuno degli utenti ha mai sperimentato questo errore. Quindi, ho cambiato "scope" della ricerca ed ho capito che è una coppia di errori di quelli che vengono scatenati "sotto pelle" dal framework.
In particolare, dalle mie ricerce ho scoperto che:
Invalid character in a Base-64 string mi viene restituito dal framework quando l'utente interrompe la sua operatività durante una grossa postback (es: rete lenta e tanti dati, oppure upload di un file). In questo caso lo stream viene troncato ed il framework cerca comunque di fare il parsing di quello che gli è arrivato senza però avere successo e scatenando l'errore.
Unable to validate data invece è "causato" dall'utente, in quanto magari sta cercando di "riutilizzare" una postback che è li da troppo tempo: prima che parta la forms authentication per buttarlo fuori, il framework controlla la validità della richiesta. Però ormai .NET ha generato un'altra chiave (es: l'applicazione si è riciclata oppure è ferma da tanto tempo. Tipico caso sono gli utenti che si lasciano la schermata aperta alle 6 di pomeriggio e sperano di riuscire a riutilizzarla la mattina alle 9) e la validazione fallisce. In questo caso si potrebbe "fissare" la machinekey da web.config e si eviterebbe l'errore, anche se comunque l'utente "pigro" non riuscirebbe a riutilizzare i suoi dati... ma preferisco tenerla per avere un pò di "statistica" su quante volte l'utente rimane qualche ora davanti al monitor fermo e poi fa click :)