ArcadiA Club
ArcadiA Club


AAC FORUM     AAC News     AAC Box    



Home Page   Home Page
programmazione.htm   Programmazione - FORUM sezione  Vai al FORUM
 
Username:
Password:
Iscriviti!  |  Recupero password



Iscriviti GRATIS, potrai navigare senza questa
fascia e accedere a contenuti esclusivi:

    E-Mail:

Password:



 

 
- Gestione degli errori in un sito ASP .Net -
 
COSA SERVE PER QUESTO TUTORIAL
Chiedi sul FORUM | Glossario cognizioni basiche di un qualsiasi linguaggio .Net
Come creare rapporti personalizzati su errori ASP .Net

UNA GESTIONE CENTRALIZZATA
L'evento Application_Error di global.asax.

Un sito ASP .Net inevitabilmente genera un certo numero di errori e in alcuni casi (primo tra tutti hosting condiviso) non è possibile accedere al Visualizzatore eventi di sistema (dove ASP .Net riporta tutte le pagine che hanno generato errori) o comunque si preferisce avere un resoconto in un database, in un file di testo o magari via e-mail degli errori che si sono verificati. ASP .Net mette a disposizione dello sviluppatore la possibilità di eseguire una funzione ogni volta che si genera un errore, tramite il file global.asax, file di codice semplice da usare e che permette di gestire eventi proprio come errori, richiesta di una qualsiasi pagina, inizio e termine di una sessione e così via. In questo caso siamo interessati all'evento Application_Error che viene appunto sollevato quando si genera un'eccezione (non gestita) su qualsiasi pagina del sito.

		
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    'Configurazione
    Dim blnAddInDatabase As Boolean = True
    Dim blnAddInTextFile As Boolean = True
    Dim blnSendEMail As Boolean = True
    Dim strErrorFile As String = Server.MapPath("/error_log.txt")

    'Parti salienti riguardanti l'errore
    Dim strUrl As String = Context.Request.RawUrl
    Dim strFilePath As String = Context.Request.FilePath
    Dim strRequestType As String = Context.Request.RequestType
    Dim strIP As String = Context.Request.ServerVariables("REMOTE_ADDR")
    Dim strHeaders As String = Context.Request.ServerVariables("ALL_RAW")
    Dim strException As String = String.Empty

    'Prendiamo informazioni sull'eccezioni e tutte le eccezioni interne
    Dim exc As Exception = Context.Error
    Do
        strException &= _
            "Type: " & exc.GetType().ToString() & vbNewLine & _
            "Message: " & exc.Message & vbNewLine & _
            "Stack trace: " & vbNewLine & exc.StackTrace & vbNewLine & vbNewLine
        exc = exc.InnerException
    Loop While exc IsNot Nothing


    If blnAddInDatabase Then

        Dim strSqlInsert As String = _
            "INSERT INTO Errors(`Date`, URL, FilePath, Request, IP, Headers, Exception) " & _
            "VALUES(Now(), ""{0}"", ""{1}"", ""{2}"", ""{3}"", ""{4}"", ""{5}"")"
        strSqlInsert = String.Format(strSqlInsert, _
            SQLEscape(strUrl), SQLEscape(strFilePath), SQLEscape(strRequestType), _
            SQLEscape(strIP), SQLEscape(strHeaders), SQLEscape(strException))

        'Mettere la vostra connessione al database
        Dim cnt As Odbc.OdbcConnection = GetConnection()
        Dim cmdInsert As New Odbc.OdbcCommand(strSqlInsert, cnt)
        cnt.Open()
        cmdInsert.ExecuteNonQuery()
        cnt.Close()

    End If

    Dim strTxtError As String
    If blnAddInTextFile OrElse blnSendEMail Then
        strTxtError = "Error ({0})" & vbNewLine & vbNewLine & _
            "URL: {1}" & vbNewLine & _
            "FilePath: {2}" & vbNewLine & _
            "Request: {3}" & vbNewLine & _
            "IP: {4}" & vbNewLine & vbNewLine & _
            "Headers:" & vbNewLine & "{5}" & vbNewLine & vbNewLine & _
            "Excpetion:" & vbNewLine & "{6}" & vbNewLine & vbNewLine & _
            vbNewLine & vbNewLine & vbNewLine & vbNewLine
        strTxtError = String.Format(strTxtError, Now.ToString(), strUrl, strFilePath, strRequestType, _
            strIP, strHeaders, strException)

        If blnAddInTextFile Then
            IO.File.AppendAllText(strErrorFile, strTxtError, System.Text.Encoding.UTF8)
        End If

        If blnSendEMail Then
            'La vostra funzione per mandare e-mail
            SendMail(strTxtError)
        End If

    End If

End Sub

Function SQLEscape(str As String) As String 
    Return str.Replace("""", """""")
End Function 

Il codice sopra è abbastanza semplice, non fa nient'altro che raccogliere alcune informazioni riguardanti la richiesta (se è GET o POST, URL, header HTTP e altro) e sull'errore, prendendo dettagli sull'eccezione, che però nella maggior parte dei casi è generica e bisogna pertanto guardare la InnerException che contiene il vero errore. Iterativamente raccogliamo informazioni su tutte le eccezioni annidate finché ve ne sono. L'oggetto usato per ottenere tutte queste informazioni è Context, di tipo System.Web.HttpContext. Infine scriviamo il tutto su file, in un database o lo inviamo via mail. Di seguito riportiamo la query SQL usata per creare la tabella degli errori:


CREATE TABLE `Errors` (
  `Date` datetime default NULL,
  `URL` text,
  `FilePath` text,
  `Request` varchar(10) default NULL,
  `IP` varchar(255) default NULL,
  `Exception` text,
  `Headers` text,
  `ID` int(11) NOT NULL auto_increment,
  PRIMARY KEY  (`ID`)
)

Infine riportiamo una semplice pagina per testare il comportamento in caso di errore:


<%
Throw New Exception("Prova")
%>

 

<< INDIETRO by VeNoM00  


Video collegati Visualizza i video di questa pagina
Visualizza video sull'argomento "application".
Visualizza video sull'argomento "error".
Visualizza video sull'argomento "global".
Visualizza video sull'argomento "asax".
Visualizza video sull'argomento "gestione".
Visualizza video sull'argomento "errori".
Visualizza video sull'argomento "application error global asax gestione errori asp net".


Dì la tua: cosa ne pensi?
Esponi il tuo punto di vista e condividilo con migliaia di persone

Oggetto nuova discussione:


Testo del messaggio:

E-Mail:

Quanto fa più dieci:




 





^ TOP  
Linkaci | Segnala errore | Invita | Stampa


pubblicità | privacy | visione | diritti | ufficio stampa | donazioni | scrivici
© 1999-2017 - P.IVA 02284690035 - Grafica, layout e contenuti sono di esclusiva proprietà di ArcadiA Club.

Powered by:
Spazi pubblicitari di alto livello
 

Compra in un click! | Cerca prodotti in offerta: