Segnala il sito a un amico |
|
|
Se hai trovato questa pagina interessante, scrivilo ad un amico, clicca qui |
|
|
NEW!! GiDiNet Web Directory |
|
|
GiDiNet Directory è una Web Directory divisa in più aree tematiche in cui potrete
trovare comodamente siti che trattano argomenti di vostro interesse, continua... |
|
|
Statistiche |
|
Oggi
21/11/2024
sei il visitatore n.
per un totale di
visitatori dal 23/04/2007
|
|
|
|
|
Hai un problema particolare? Non trovi quello che stai cercando? clicca qui!
Intercettare gli errori e segnalarli automaticamente al webmaster - ASP.NET 2.0
Lo script pubblicato in questa pagina, è un'esempio sull'uso degli httphandler e serve per intercettare gli errori generati da pagine aspx e notificarli automaticamente via e-mail al responsabile del sito.
Questo tipo di soluzione può essere un'alternativa all'uso del file global.asax, per poter gestire in modo differente gli errori.
Le richieste vengono gestite con un apposito http handler, che può notificare gli errori avvenuti sia in fase di compilazione sia in fase di esecuzione.
Questa soluzione è utile per tenere traccia di tutti gli errori che si sono verificati sul sito per poi risolverli, senza doversi affidare esclusivamente alle segnalazioni dei visitatori.
Oltre a questo, si potrà poi lasciare disattivata la visualizzazione dei messaggi di errori completi sul browser, evitando cosi' il rischio di rendere note informazioni sulla propria applicazione web al pubblico.
1. Installazione dello script
Per l'installazione dello script è sufficiente creare due file /App_Code/NotifyErrorHandler.vb e /Web.config secondo quanto indicato di seguito
Se il file /Web.config fosse già presente sullo spazio web, basterà modificarlo inserendo quanto riportato in grassetto nelle sezioni indicate.
Scarica i sorgenti completi
Codice del file /App_Code/NotifyErrorHandler.vb:
'Copyright (C) 2007 Daniele Iunco
'This program is free software; you can redistribute it and/or modify
'it under the terms of the GNU General Public License as published by
'the Free Software Foundation; either version 2 of the License, or
'(at your option) any later version.
'This program is distributed in the hope that it will be useful,
'but WITHOUT ANY WARRANTY; without even the implied warranty of
'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
'GNU General Public License for more details.
'You should have received a copy of the GNU General Public License along
'with this program; if not, write to the Free Software Foundation, Inc.,
'51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Imports System
Imports System.Web
Namespace GiDiNet
'NotifyErrorHandler v1.0
'Author: Daniele Iunco
'Date: 8th May 2007
'ATTENZIONE: utilizzando questo modulo per qualsiasi file aspx (*.aspx) non sarà possibile utilizzare altri httphandler
Public Class NotifyErrorHandler
Inherits UI.PageHandlerFactory
Implements IHttpHandlerFactory, SessionState.IRequiresSessionState
'Inserire il percorso della pagina di errore, la pagina deve essere un file .aspx
Const ErrorPagePath As String = "/errorpage.aspx"
Public Overrides Function GetHandler(ByVal context As HttpContext, ByVal requestType As String, ByVal virtualPath As String, ByVal path As String) As IHttpHandler
'Questa parte del modulo praticamente intercetta gli errori in fase di compilazione
Try
Dim myHttpHandler As IHttpHandler = MyBase.GetHandler(context, requestType, virtualPath, path)
Return New myCustomHttpHandler(virtualPath, ErrorPagePath, myHttpHandler)
Catch ex As Exception
NotifyErrorToAdmin(ex.Message & vbCrLf & ex.StackTrace)
Return MyBase.GetHandler(context, requestType, ErrorPagePath, context.Request.MapPath(ErrorPagePath))
End Try
End Function
Public Shared Sub NotifyErrorToAdmin(ByVal ErrorText As String)
'Modificare le righe seguenti per inserire gli indirizzi e-mail corretti e personalizzare il messaggio di errore
Dim myMail As New Net.Mail.MailMessage()
With myMail
.From = New Net.Mail.MailAddress("from@domain.com") 'Mittente
.To.Add(New Net.Mail.MailAddress("to@domain.com")) 'Destinatario
.Subject = "Errore nell'esecuzione della pagina"
.IsBodyHtml = False
.Body = "Si è verificato il seguente errore: " & vbCrLf & ErrorText
End With
Dim myClient As New Net.Mail.SmtpClient()
myClient.Send(myMail)
End Sub
End Class
Public Class myCustomHttpHandler
Implements IHttpHandler, SessionState.IRequiresSessionState
Private _objHandler As IHttpHandler
Private _url As String
Private _errorPage As String
Public Sub New(ByVal url As String, ByVal errorPage As String, ByVal objHandler As IHttpHandler)
_objHandler = objHandler
_url = url
_errorPage = errorPage
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return _objHandler.IsReusable
End Get
End Property
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
'Questa parte del modulo intercetta gli errori generati in fase di esecuzione
Try
_objHandler.ProcessRequest(context)
Catch ex2 As Threading.ThreadAbortException
'Questa eccezione generalmente è voluta (Uso di Response.Redirect, interruzione del thread da script, etc)
Exit Sub
Catch ex As Exception
NotifyErrorHandler.NotifyErrorToAdmin(TraceException(context, ex))
Dim _ErrorHandler As IHttpHandler = UI.PageParser.GetCompiledPageInstance(_errorPage, context.Request.MapPath("/errorpage.aspx"), context)
_ErrorHandler.ProcessRequest(context)
End Try
End Sub
Private Function TraceException(ByRef context As HttpContext, ByVal exOriginal As Exception) As String
'questa procedura restituisce una stringa contenente delle informazioni sull'eccezione
'è possibile modificare quanto riportato di seguito per inserire ulteriori dettagli
Dim dNow As Date = Now
Dim sResult As String = "" & _
"Data/ora: " & dNow.ToShortDateString & " " & dNow.ToLongTimeString & vbCrLf & _
"" & vbCrLf & _
"ApplicationPath: " & context.Request.ApplicationPath & vbCrLf & _
"" & vbCrLf
If context.Request.QueryString.Count > 0 Then
sResult &= "URL: " & _url & "?" & context.Request.QueryString.ToString & vbCrLf
Else
sResult &= "URL: " & _url & vbCrLf
End If
sResult &= "Request path: " & context.Request.Path & vbCrLf & _
"Remote address: " & context.Request.ServerVariables("REMOTE_ADDR") & vbCrLf & _
"User: " & "" & vbCrLf & _
"- Is authenticated: " & context.User.Identity.IsAuthenticated & vbCrLf & _
"- AuthenticationType: " & context.User.Identity.AuthenticationType & vbCrLf & _
"- Username: " & context.User.Identity.Name & vbCrLf & _
"" & vbCrLf & _
"Message:" & exOriginal.Message & vbCrLf & _
"Stack Trace:" & exOriginal.StackTrace & vbCrLf
If Not exOriginal.InnerException Is Nothing Then
Dim subEx As Exception = exOriginal.InnerException
sResult &= vbCrLf & _
"InnerException Message:" & subEx.Message & vbCrLf & _
"InnerException Stack Trace:" & subEx.StackTrace
End If
Return sResult
End Function
End Class
End Namespace
Codice del file /Web.config:
Nota: Se sul server web è già presente un file web.config, modificare il file esistente inserendo le righe indicate in grassetto nelle rispettive sezioni (mailSettings e httpHandlers)
<?xml version="1.0"?>
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="indirizzo.mailserver.com" port="25"/>
</smtp>
</mailSettings>
</system.net>
<system.web>
<httpHandlers>
<add verb="GET" path="*.aspx" type="GiDiNet.NotifyErrorHandler"></add>
</httpHandlers>
</system.web>
</configuration>
2. Configurazione e uso dello script
Per la configurazione è necessario modificare i parametri seguendo le istruzioni riportate di seguito:
Parametri del mail server (file /web.config):
Modificare la riga <network host="indirizzo.mailserver.com" port="25"/> inserendo l'indirizzo del mail server e la relativa porta.
Messaggi di errore e e-mail di notifica (file /App_Code/NotifyErrorHandler.vb)
Modificare la riga: Const ErrorPagePath As String = "/errorpage.aspx"
Inserendo il percorso relativo di una pagina aspx che verrà inviata al visitatore quando si verifica un errore.
Nel metodo NotifyErrorToAdmin, modificare le righe:
.From = New Net.Mail.MailAddress("from@domain.com") 'Mittente
.To.Add(New Net.Mail.MailAddress("to@domain.com")) 'Destinatario
Inserendo gli indirizzi e-mail da utilizzare come mittente e destinatario del messaggio e-mail.
Sempre nel metodo NotifyErrorToAdmin è possibile personalizzare il messaggio inviato.
Pubblicato da: Daniele Iunco il 08/04/2007
|
|
|