The requested page is not available for the requested platform. You are viewing the content for Default platform.

Handling and Log Server-Side Errors in ASP.NET Web Forms

  • 4 min to read

The ASP.NET Web Forms Dashboard allows you to catch and log server-side exceptions that can occur when an incorrect dashboard is being loaded or data cannot be requested.

Catch Unhandled Exceptions

Use the ASPxWebControl.CallbackError event to catch server-side exceptions. This event is used for the ASPxDashboard and DashboardConfigurator settings.

  1. Open (or create) the Global.asax file in your ASP.NET Web Forms project.

  2. In the Application_Start method, use the HttpApplication.Error event handler to subscribe to the ASPxWebControl.CallbackError event:

    using DevExpress.Web;
    // ...
    
    protected void Application_Start() {
        // ...
        ASPxWebControl.CallbackError += Application_Error;
    }
    
    protected void Application_Error(object sender, EventArgs e) {
        Exception exception = HttpContext.Current.Server.GetLastError();
        // ...
    } 
    

Catch Connection Errors

The ConnectionError event fires when the current connection parameters do not allow you to connect to a data store (for instance, the database is inaccessible).

  1. If you use the ASPxDashboard settings to configure a control, handle the ASPxDashboard.ConnectionError event. For example, add an event subscription when the page loads:

    using DevExpress.DashboardWeb;
    // ...
    
    protected void Page_Load(object sender, EventArgs e) {
        // ...
        ASPxDashboard1.ConnectionError += ASPxDashboard_ConnectionError;         
    }
    
    protected void ASPxDashboard_ConnectionError(object sender, ConnectionErrorWebEventArgs e) {
        Exception exception = e.Exception;
        // ...
    }
    
  2. If you use the DashboardConfigurator settings to configure a control, handle the DashboardConfigurator.ConnectionError event:

    using DevExpress.DashboardWeb;
    // ...
    
    protected void Application_Start() {
        // ...
        DashboardConfigurator.Default.ConnectionError += Default_ConnectionError;
    }
    
    private static void Default_ConnectionError(object sender, ConnectionErrorWebEventArgs e) {
        Exception exception = e.Exception;
        // ...
    }
    

Log Error Details

  1. Create the TextLog class with the AddToLog method that adds a file with exception information to the specified path. The exception message is added to the end of the file if the log file already exists. The GetExceptionInfo method allows you to traverse through internal exceptions to save information about the issue's cause:

    using System.IO;
    using System.Text;
    using DevExpress.DashboardCommon;
    //...
    
        public static class TextLog {
        public static void AddToLog(Exception exception, string path) {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(DateTime.Now.ToLocalTime().ToString("F"));
            sb.AppendLine("Source File: " + System.Web.HttpContext.Current.Request.RawUrl);
            GetExceptionInfo(exception, sb);
            sb.AppendLine("------------------------------------------------------------" + Environment.NewLine);
            File.AppendAllText(path, sb.ToString());
        }
    
        private static void GetExceptionInfo(Exception exception, StringBuilder sb) {
            sb.AppendLine(exception.GetType().ToString());
            sb.AppendLine(exception.Message);            
            sb.AppendLine("Stack Trace: ");
            sb.AppendLine(exception.StackTrace);            
            if (exception is DashboardDataLoadingException) {
                foreach (var dataLoadingError in ((DashboardDataLoadingException)exception).Errors) {
                    sb.AppendLine("InnerException: ");
                    GetExceptionInfo(dataLoadingError.InnerException, sb);
                }
            }
            if (exception.InnerException != null) {
                sb.AppendLine("InnerException: ");
                GetExceptionInfo(exception.InnerException, sb);
            }
        }
    }
    
  2. Use the created AddToLog method to log the exception information to a text file:

    protected void Application_Error(object sender, EventArgs e) {
        TextLog.AddToLog(
            System.Web.HttpContext.Current.Server.GetLastError(), 
            System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Error.log"));
    }
    
    private static void Default_ConnectionError(object sender, ConnectionErrorWebEventArgs e) {
        TextLog.AddToLog(
            e.Exception, 
            System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Error.log"));
    }
    

Prevent Redirection on a Callback Error

When a server error occurs during the server-side callback process, ASPxHttpHandlerModule prevents an application from remaining pending by composing and sending a specific response to the client. When you use the callbackErrorRedirectUrl option within the Web.config file by specifying the page name, the response is redirected to the specified page. See Redirection on a Callback Error for more information.

<configuration>
    ...
    <devExpress>
        ...
        <errors callbackErrorRedirectUrl="" />
    </devExpress>
    ...
</configuration>

You can disable callbackErrorRedirectUrl only for the page containing the Web Dashboard. To do this, add the following code to your Web.config file:

<location path="<!-- a path to a page containing the dashboard control-->">
    <devExpress>
        <errors callbackErrorRedirectUrl="" />
    </devExpress>
</location>

Logify

You can use the DevExpress Logify Alert tool for analyzing the application instead of the standard error handling methods.

Logify is an automated application-monitoring cloud service delivering crash reports to your centralized control panel. It enables you to set up report filtering, trigger notifications manually, and add custom data to reports. You can also reroute notifications to a third-party logging service or your issue tracking tool of choice.

Refer to Logify Alert Documentation for information on how to get started with the Logify Alert service in ASP.NET Web Forms.

See Also