Tutorial :Application_Error ignored?



Question:

I've put the following code in global.asax

<%@ Application Language="VB" %>    <script runat="server">        Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)          ' Code, der beim Starten der Anwendung ausgeführt wird.      End Sub          Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)          ' Code, der beim Beenden der Anwendung ausgeführt wird.      End Sub        ' HelpLink Gets or sets a link to the help file associated with this exception.       ' InnerException Gets the Exception instance that caused the current exception.        ' Message Gets a message that describes the current exception.        ' Source Gets or sets the name of the application or the object that causes the error.        ' StackTrace Gets a string representation of the frames on the call stack at the time the current exception was thrown.        ' TargetSite Gets the method that throws the current exception.          ' http://www.developer.com/net/asp/article.php/961301/Global-Exception-Handling-with-ASPNET.htm      Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)          ' Code, der bei einem nicht behandelten Fehler ausgeführt wird.          'get reference to the source of the exception chain          Dim ex As Exception = Server.GetLastError().GetBaseException()            'log the details of the exception and page state to the          'Windows 2000 Event Log          'System.Diagnostics.EventLog.WriteEntry("source", "MESSAGE: " + ex.Message + "\nSOURCE: " + ex.Source + "\nFORM: " + _          'HttpContext.Current.Request.Form.ToString() + "\nQUERYSTRING: " + HttpContext.Current.Request.QueryString.ToString() + _          '"\nTARGETSITE: " + ex.TargetSite.ToString + "\nSTACKTRACE: " + ex.StackTrace, System.Diagnostics.EventLogEntryType.Error)            Response.Redirect("GeneralError.aspx", False)          'Response.Redirect("GeneralError.aspx")          'Insert optional email notification here...            ''this is what we are sending          'Dim post_data As String = "MESSAGE: " + ex.Message + "\nSOURCE: " + ex.Source + "\nFORM: " + _          'HttpContext.Current.Request.Form.ToString() + "\nQUERYSTRING: " + HttpContext.Current.Request.QueryString.ToString() + _          '"\nTARGETSITE: " + ex.TargetSite.ToString + "\nSTACKTRACE: " + ex.StackTrace          'post_data = HttpContext.Current.Server.UrlEncode(post_data)            '' this is where we will send it          'Dim uri As String = "http://localhost/cor_raumplaner/GlobalError.aspx"            '' create a request          'Dim request As System.Net.HttpWebRequest = DirectCast(System.Net.WebRequest.Create(uri), System.Net.HttpWebRequest)          'request.KeepAlive = False          'request.ProtocolVersion = System.Net.HttpVersion.Version10          'request.Method = "POST"            '' turn our request string into a byte stream          'Dim postBytes As Byte() = Encoding.ASCII.GetBytes(post_data)            '' this is important - make sure you specify type this way          'request.ContentType = "application/x-www-form-urlencoded"          'request.ContentLength = postBytes.Length          'Dim requestStream As System.IO.Stream = request.GetRequestStream()            '' now send it          'requestStream.Write(postBytes, 0, postBytes.Length)          'requestStream.Close()            '' grab te response and print it out to the console along with the status code          'Dim response1 As System.Net.HttpWebResponse = DirectCast(request.GetResponse(), System.Net.HttpWebResponse)            'Response.Write(New System.IO.StreamReader(response1.GetResponseStream()).ReadToEnd())          'Response.Write(response1.StatusCode)      End Sub        Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)          ' Code, der beim Starten einer neuen Sitzung ausgeführt wird.      End Sub        Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)          ' Code, der am Ende einer Sitzung ausgeführt wird.           ' Hinweis: Das Session_End-Ereignis wird nur ausgelöst, wenn der sessionstate-Modus          ' in der Datei "Web.config" auf InProc festgelegt wird. Wenn der Sitzungsmodus auf StateServer           ' oder SQLServer festgelegt wird, wird das Ereignis nicht ausgelöst.      End Sub    </script>  

Then i've added a new page, and made it generate an error, like this:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load      Dim mylanguage As String = Session("Language")      Dim iLength As Integer = mylanguage.Length    End Sub  

Now, the problem is seems to be that the application error handler in global.asax doesn't get called, instead I receive a standard exception: "Object reference not set to an instance of an object"

Why ? Shouldn't it call the error handler and redirect to the GeneralError.aspx page ?


Solution:1

In your web.config file make sure you have Debug=false If it's turned on you'll see all the error messages and your error handler may not work as intended.


Solution:2

When using the AspNetDevelopmentServer shipped with Visual Studio it´ll ignore if the error isn't cleared before continuing outside the Application_Error but in IIS the error is still in the session when exiting the method and thus it´s deemed unhandled by IIS which´ll then display it in its own error page.

To correct this use Server.ClearError() after Server.GetLastError() to make sure you signal the server that You will handle the error.

/ Regards


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »