7

Asp.Net 4.0 Web Forms次のエラーを特定の時間にスローするアプリケーションがあります

「'/MySiteDev'アプリケーションのサーバーエラー」。

このエラーは時々発生します。そして、このエラーはApplication_Errorで処理されるイベントを発生させていませんGlobal.asax

これはApplication_Errorを発生させていないので、このエラーイベントのログを持つ他の可能な場所は何ですか?イベントビューア以外に利用できるものはありますか?

ASP.Netフレームワークによって処理される例外を見つける方法はありますか?

注:customErrors mode="Off"。またrunAllManagedModulesForAllRequests="true"

アップデート

方法からの参照:アプリケーションレベルのエラーの処理

Global.asaxファイルで定義されているエラーハンドラーは、ASP.NETランタイムによる要求の処理中に発生したエラーのみをキャッチします。たとえば、ユーザーがアプリケーションで発生しない.aspxファイルを要求すると、エラーがキャッチされます。ただし、ユーザーが存在しない.htmファイルを要求した場合、エラーはキャッチされません。ASP.NET以外のエラーの場合は、インターネットインフォメーションサービス(IIS)でカスタムハンドラーを作成できます。カスタムハンドラーは、サーバーレベルのエラーに対しても呼び出されません。

Global.asaxファイルからリクエストのエラー情報を直接出力することはできません。制御を別のページ(通常はWebフォームページ)に移す必要があります。コントロールを別のページに転送する場合は、転送方法を使用してください。これにより、現在のコンテキストが保持されるため、GetLastErrorメソッドからエラー情報を取得できます。

エラーを処理した後、Serverオブジェクト(HttpServerUtilityクラス)のClearErrorメソッドを呼び出してエラーをクリアする必要があります。

コード

    protected void Application_Error(object sender, EventArgs e)
    {
        //Get the exception object
        Exception exception = Server.GetLastError().GetBaseException();

        //Get the location of the exception
        string location = Request.Url.ToString();
        if (!String.IsNullOrEmpty(location))
        {
            string[] partsOfLocation = location.Split('/');
            if (partsOfLocation != null)
            {
                if (partsOfLocation.Length > 0)
                {
                    location = partsOfLocation[partsOfLocation.Length - 1];
                }
            }

            //Maximum allowed length for location is 255
            if (location.Length > 255)
            {
                location = location.Substring(0, 254);
            }
        }

        string connectionString = ConfigurationManager.ConnectionStrings[UIConstants.PayrollSQLConnection].ConnectionString;
        ExceptionBL exceptionBL = new ExceptionBL(connectionString);

        exceptionBL.SubmitException(exception.Message, location);
        Log.Logger.Error(exception.Message);

    }

CONFIG

<system.web>

<compilation debug="true" targetFramework="4.0" />
<pages validateRequest="false"></pages>
<httpRuntime requestValidationMode="2.0" />
<customErrors mode="Off"/>
<authentication mode="Windows"></authentication>
<identity impersonate="true" userName="domain\xxxx" password="xxxx"/>

</system.web>

<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<httpErrors errorMode="Detailed" />
</system.webServer>

更新された参考文献

  1. Application_Errorが発生しない
  2. Global.asaxイベントApplication_Errorが発生していません
  3. Application_Errorは発生しませんか?
  4. 方法:アプリケーションレベルのエラーを処理する
4

2 に答える 2

3

イベントビューアでログを調べます。イベントビューアは、サーバーレベルとアプリケーションレベルの両方のエラーをログに記録する必要があります。

アプリケーションが正常に開始され、コンテキストが作成される前に発生しているため、アプリケーションエラーハンドラはおそらくイベントを処理していません。したがって、アプリケーション構成またはサーバー構成が要求の処理を停止しているように見えます。

または、アプリケーションがリクエストライフサイクルのかなり早い段階で問題に遭遇しているため、開始後も、サーバーがプロセスを強制終了することを決定するまで「ハング」します(たとえば、@ MikeSmithDevによって言及されたStackOverflowExceptionの形式で)。

于 2013-02-14T14:15:16.767 に答える
1

これは、load balancedAボックスとBボックスのある環境です。

Webアプリケーションを展開したチームは、ボックスの1つで、構成ファイルが正しくコピーされていないことを確認しました。

アプリケーションは、Aボックスにヒットし、Bボックスで失敗したときにうまく機能したと思います。設定がないので、を呼び出すことができなかったと思いますApplication_Error

意見が違う場合は教えてください。

注:再デプロイした場合、問題は発生しません

于 2013-02-19T10:17:27.627 に答える