Gestione di errori a livello applicazione

venerdì 26 novembre 2004 - 09.34

Klaus-zanini Profilo | Senior Member

Ho provato a gestire gli errori non controllati con blocchi try-catch seguendo le istruzioni di questo link http://msdn.microsoft.com/library/ita/default.asp?url=/library/ita/dv_vbcode/html/vbtskcodeexamplehandlingapplicationlevelerror.asp

Le cose funzionano abbastanza bene, ma vorrei arrivare ad un livello di dettaglio superiore, infatti vorrei poter gestire gli errori descritti come 401.1, 401.2 ecc. anziché solo quelli descritti nel link (403,404,...).

Ho provato a guardare, con .NET reflector ;), come è fatta la funzione GetHttpCode richiamata nella Select Case, e ho notato che restituisce solo i valori 500, 401 o 414.
Quindi non vedo come possano essere recuperati i vari case dell'esempio.

Qualcuno saprebbe aiutarmi?

Klaus-zanini Profilo | Senior Member

Sto facendo molti test su questa gestione degli errori e ho trovato un "piccolo" problema: prima mi funzionava perché avevo messo ne web.config
<customErrors mode="On" defaultRedirect="Errors.aspx">
questo però mi nascondeva il vero problema: ossia il fatto che nel global.asax, nella sub Application_Error il comando Server.Transfer("Errors.aspx") viene SNOBBATO.
Ora che ho tolto la defaultRedirect ci passa sopra senza entrare nella pagina e visualizza l'errore.

Ho provato anche mettendo nel web.config mode="Off" o mode="RemoteOnly" e nulla. ho tolto completamente il tag del <customErrors>, ma nulla!!!

Cosa posso fare? Qualcuno sa dirmi perché il Server.Transfer non venga lanciato?

LudovicoVan Profilo | Junior Member

Non mi pare che tu possa fare un Server.Transfer dall'Application_Error. D'altra parte, la direttiva customErrors mi sembra il modo "usuale" di procedere.

Per un esempio puoi dare un occhiata qui: http://msdn.microsoft.com/library/en-us/cpgenref/html/gngrfCustomerrorsSection.asp

HTH. -LV

Klaus-zanini Profilo | Senior Member

Intanto grazie del link che potrebbe essere un'ottima alternativa, ma mi piacerebbe comunque sapere dove sbaglio...
In fondo quello che faccio è commentato nel link che ho indicato sotto e non vedo perché non dovrebbe funzionare. Viene proprio inserito il codice con Server.Transfer dentro alla sub Application_Error...

Magari devo configurare qualcosa?

weird Profilo | Newbie

Ho un grosso problema!
Tipo che se sto collegato, a tempo indeterminato succede che appare una schermata blu con scritto
scaricamento della memoria fisica.
Secondo me ho un virus! Aiutatemi vi prego sto impazzendo.
Non voglio formattare ancora [ho win2000]
Aspetto soluzione! Magari! Ma sarebbe grandioso. Ciao :)

Klaus-zanini Profilo | Senior Member

Ti converrebbe aprire un thread apposta. In questo stiamo parlando d'altro...

LudovicoVan Profilo | Junior Member

Ciao Klaus,

ho guardato il link e hai ragione, si dovrebbe poter fare. L'unica cosa che mi viene in mente è "Dopo la gestione, è necessario cancellare un errore chiamando il metodo ClearError dell'oggetto Server (classe HttpServerUtility)"... ce l'hai?

In generale, ti consiglierei comunque di usare il Web.config. Questo perché (lo spiega anche la documentazione Microsoft) avere la configurazione in un file di testo modificabile dal web master, senza nemmeno la necessità di riavviare alcunché, è una cosa, altra cosa è una modifica al Global.asax che richiede l'intervento del programmatore, la ricompilazione dell'applicazione e l'eventuale deployment della nuova versione!

Un esempio per tutti: per avere un errore dettagliato, ti basta mettere temporaneamente a Off il customErrors; la stessa cosa nel Global.asax richiede invece tutto ciò cui accennavo sopra.

Comunque, qui è questione di "pratiche", dunque anche campo di opinioni... ;)

A presto. -LV

Klaus-zanini Profilo | Senior Member

Ciao Ludovico,
ho trovato dove sbagliavo (una cavolata, ultimamente ne faccio tante!!!).
La pagina di errore era allo stesso livello del global.asax quindi mettevo Server.Transfer("Errors.aspx"), ma non mi rendevo conto che la pagina che lanciava l'errore non era il global.asax ma una situata in una subdirectory del progetto web, quindi cercava al suo livello la pagina Errors.aspx anziché cercarla in un livello superiore.

-.-

L'importante è che adesso funziona.
Grazie klaus
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