1

これは私にとって多くの苦痛の源でした!ExecutionTimeoutアプリケーションに 110 秒のグローバルを使用しています。1 つの特定のページにコントロールが含まれているため、多数の未処理の例外が生成されます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 でのアプリケーション レベルの例外処理に委ねられているようです。

maxRequestLengthクライアント側でファイルサイズを確認できないことは確かです。 andを増やし続けたくありません。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.asaxApplication_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 に答える