Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET UpdatePanel超时和500个带有自定义错误的错误_Asp.net_Vb.net_Asp.net Ajax_Updatepanel - Fatal编程技术网

ASP.NET UpdatePanel超时和500个带有自定义错误的错误

ASP.NET UpdatePanel超时和500个带有自定义错误的错误,asp.net,vb.net,asp.net-ajax,updatepanel,Asp.net,Vb.net,Asp.net Ajax,Updatepanel,我有一个.net应用程序,它使用customerrors web.config模块显示有意义的错误消息。对于由非ajax和ajax组件updatepanel引起的500个错误/异常,它可以正常工作。但是,在updatepanel的异步请求超时的场景中,根本不会出现错误。我能够在firebug中看到超时,并提出了一个解决方案,该解决方案至少会将错误消息显示为警报,然后使用javascript将用户重定向到500错误页面,但在出现此类未处理错误的情况下,它并不像应用程序的其余部分那样做。我基本上只是

我有一个.net应用程序,它使用customerrors web.config模块显示有意义的错误消息。对于由非ajax和ajax组件updatepanel引起的500个错误/异常,它可以正常工作。但是,在updatepanel的异步请求超时的场景中,根本不会出现错误。我能够在firebug中看到超时,并提出了一个解决方案,该解决方案至少会将错误消息显示为警报,然后使用javascript将用户重定向到500错误页面,但在出现此类未处理错误的情况下,它并不像应用程序的其余部分那样做。我基本上只是希望所有的事情都通过LogEvent机制,所以根据错误的严重性,它会做必要的工作

以下是我的问题:

此500错误页面中没有任何内容 这些超时方案的Server.GetLastError。这是一辆汽车吗 预期行为? 是否可以更改它,以便我可以访问中的这些超时 Server.GetLastError,或者通过LogEvent机制运行此错误? 有没有更好/更优雅的方法来处理这个问题? 下面是我的代码,给你一个想法,不完全是我在我的应用程序,但相当接近

Web.Config

带有UpdatePanel ASPX的页面

使用NLog记录事件的函数


是的,服务器错误500与web服务器有关

请阅读Microsoft提供的此知识库:

请不要弄乱HTTP错误消息。错误500通常发生在web服务器上,而不是应用程序上。因此,不建议为重定向指定错误500,这将混淆web管理员和开发人员

这就是原因:

处理此问题的最佳方法是使用登录机制,如登录或使用登录。在此之前,您可以使用自定义错误/异常页面,但不处理错误500

<customErrors mode="On" defaultRedirect="~/Errors/ErrorUnknown.aspx" redirectMode="ResponseRewrite">
  <error statusCode="500" redirect="~/Errors/Error500.aspx" />
</customErrors>
Dim lastException As Exception = Server.GetLastError()

If lastException IsNot Nothing Then LogEvent(LogLevel.Error, "UnHandled Error From 500 Error Page.", lastException)

LblErrorMessage.Text = "Unknown error occured when processing your request."

Session.Abandon()
<asp:ScriptManager ID="AppScriptManager" AsyncPostBackTimeout="3" runat="server" AllowCustomErrorsRedirect="True" OnAsyncPostBackError="AppAsyncPostBackError" AsyncPostBackErrorMessage="There was an error processing your request!" />
<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
    });
    function endRequestHandler(sender, args) {
        if (args.get_error() != undefined) {
            var errorMessage = "There was an error processing your request!";
            errorMessage += '\nError message: ' + args.get_error().message;
            args.set_errorHandled(true);
            alert(errorMessage);
            window.location.replace('Errors/Error500.aspx');
        }
    }        
</script>
Public Sub AppAsyncPostBackError(sender As Object, e As System.Web.UI.AsyncPostBackErrorEventArgs) Handles AppScriptManager.AsyncPostBackError

    LogEvent(LogLevel.Fatal, "Asyncpostback error from update panel.", e.Exception)

End Sub
Private Sub LogEvent(level As LogLevel, logMessage As String, exception As Exception, ParamArray args() As Object)

    Try

        Dim appLogger As Logger = LogManager.GetCurrentClassLogger()

        If exception IsNot Nothing Then

            '# If it's an exception store it in a seperate file as fatal exception
            appLogger.LogException(level, String.Format(logMessage, args), exception)

            '# send an email
            SendErrorEmail(String.Format(logMessage, args), exception)

            '# Throw Exception as this was fatal
            If level = LogLevel.Fatal Then Throw

        Else

            '# Log the message
            appLogger.Log(level, logMessage, args)

        End If

    Catch ex As Exception

    End Try

End Sub