1

这对我来说一直是痛苦的根源!我正在ExecutionTimeout为我的应用程序使用 110 秒的全局时间。一个特定页面会生成大量未处理的异常,因为它包含一个FileUpload控件。

现在问题来了……我知道如何使用以下声明限制 web.config 中的文件大小和执行超时。

<httpRuntime maxRequestLength="2097152" executionTimeout="600" />

我遇到的问题就在这里:

    'Check file size
    Dim fileSize As Integer
    Try
        fileSize = FileUpload1.FileBytes.Length
    Catch ex As Exception
        'Display message to user...
        Exit Sub
    End Try

检查文件长度的过程非常频繁地抛出异常,并且在上面没有优雅地捕获该异常try, catch,它似乎遵循 global.asax 中的应用程序级异常处理。

我很确定我无法在客户端检查文件大小,我不想不断增加maxRequestLengthand executionTimeout,我要做的就是在页面上捕获这些超时并显示一条消息。这可能吗?

编辑 - -

为了更好地说明此处的问题,请尝试运行以下代码(假设您的默认 executionTimeout 为 110 秒)。

    Try
        system.threading.thread.sleep(120000)
    Catch ex As Exception
        response.write("Error caught!!")
        Exit Sub
    End Try

确保调试已关闭。catch 块不起作用,您最终会遇到未处理的System.Web.HttpException: Request timed out错误,我还没有弄清楚?

4

1 回答 1

0

原来页面上的代码并没有直接在这里抛出异常,因此它没有被try, catch. 当脚本执行时间过长时,应用程序会监视和干预,因此当在应用程序级别引发异常时,我们需要推迟到 global.asax。

该解决方案包括在 Global.asax 块中捕获错误,Application_Error然后 response.redirecting 回到原始页面,并将错误类型附加到查询字符串中。

 Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim exc As Exception = Server.GetLastError
        Dim context As HttpContext = DirectCast(sender, HttpApplication).Context

        Dim uri As String = context.Request.Url.PathAndQuery

        If uri.Contains("users/account.aspx") Then
            Response.Redirect(context.Request.Url.PathAndQuery & "&err=" & exc.GetType().ToString)
        End If
End Sub

然后,您可以在页面加载中检查任何err查询字符串值,然后在页面上相应地显示错误。

于 2013-10-22T16:47:18.407 回答