Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Gestione degli errori strutturata

    Ciao, conosco la logica del try catch, quello che vorrei capire ora è, dovendo riscrivere un'applicazione da zero, come strutturare una corretta gestione degli errori (intendo implementare eventuali classi base in modo corretto) ... per poi magari utilizzare, come ultima operazione, Log4Net per il salvataggio dell'errore in un file di log. Che logica mi consigliate di utilizzare per strutturare la gestione degli errori a livello di WebApplication? (inoltre, esistono esempi/articoli di riferimento?)

  2. #2
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Interessa anche a me...

  3. #3
    Il discorso si fa abbastanza complesso, comunque credo di riuscire a darti qualche linea guida.

    Innanzitutto, lavorando su web e non su un'applicazione windows form, non avrai mai un "corpo principale" del programma, ma diverse pagine separate. Di conseguenza, dovrai gestire gli errori, e il logging degli stessi, metodo per metodo.

    Per semplificarti un po' la vita, puoi ricorrere ad un paio di espedienti. Innanzitutto dichiarare una classe sotto App_Code dove istanziare in maniera statica un logger di log4net, e richiamarlo così da tutte le pagine che utilizzerai, in modo da non doverne fare un'istanza per pagina.

    codice:
    public static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    Se la tua classe si chiamerà ad es. Common, ti basterà fare da ogni pagina:

    codice:
    Common.log.Error("loggo il mio errore");
    Per quanto riguarda i blocchi try/catch/finally, dovrai ovviamente utilizzarli laddove il codice può generare un eccezione. Se hai bisogno di gestire ogni tipo di errore in maniera specifica, basta che consulti la reference dei metodi che chiami, e guardare quali eccezioni possono generare, e di conseguenza gestirle con una serie di catch consecutive:

    codice:
    try
    {
    .....
    }
    catch (IOException ex)
    {
    }
    catch (ArgumentNullException ex2)
    {
    }
    catch (Exception ex3)
    {
    }
    L'eccezione generica Exception va sempre gestita per ultima, perchè è l'ultima risorsa nel caso l'errore generato non rientri in nessuna delle casistiche specificate sopra.

    Per quanto riguarda il cosa mettere nel catch, è una tua scelta. Sicuramente puoi loggare l'eccezione, poi vedere cosa vuoi che veda l'utente: se hai previsto una label che visualizzi un messaggio di errore, è sufficiente valorizzarne il testo e renderla visibile; nel caso invece che tu voglia che l'utente venga reindirizzato alla pagina di errore generico specificata nel web.config:

    codice:
    		<customErrors mode="On" defaultRedirect="~/Errori/ErroreGenerico.aspx">
    			<error statusCode="403" redirect="~/Errori/403.aspx"/>
    			<error statusCode="404" redirect="~/Errori/404.aspx"/>
    		</customErrors>
    sarà sufficiente che, dopo il logging, esegui un throw, in modo da rimandare l'applicazione in errore, e venire così gestita dalla sezione customerrors.


    Se mi viene in mente altro poi lo aggiungo.

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.