2

私の ASP.NET アプリケーションでは、以下を表示したい一般的なエラー ページを作成しています。

  1. 例外スタック トレース (管理者向け)。
  2. エラー メッセージ (すべて)。
  3. イベント ID。

アプローチは次のとおりです。

  1. 以下に示すようにカスタム クラスを定義し、Session を使用してオブジェクトを Global.asax に保存しました。
  2. エラーページでそのオブジェクトを取得し、エラーを表示しました。

    public class CustomErrorInfo
    {
        public string EventId { get; set; }
        public string ExceptionTrace { get; set; }
        public string ErrorMessage { get; set; }
        public string ContextInfo { get; set; }
    
        public override string ToString()
        {
            return (EventId + "\n" + ExceptionTrace + "\n" + ErrorMessage + "\n" + ContextInfo + "\n");
        }
    }
    

Global.asax ファイル:

void Application_Error(object sender, EventArgs e)
{
    var customErrorMessage = new  CustomErrorInfo();
    customErrorMessage.EventId = Guid.NewGuid().ToString();

    Exception exception = Server.GetLastError();

    customErrorMessage.ExceptionTrace = exception.ToString().Replace("\n","");

    customErrorMessage.ContextInfo = DateTime.Today.ToLongDateString();

    customErrorMessage.ErrorMessage = "An unhandled error.";

    Response.Redirect("WebForm1.aspx?MsgId=" + customErrorMessage.EventId + "&Msg=" + customErrorMessage.ErrorMessage +
        "&MsgTrace=" + customErrorMessage.ExceptionTrace + "&MsgContext=" + customErrorMessage.ContextInfo);

    // Code that runs when an unhandled error occurs

}

しかし、私のものは Azure アプリケーションであるため、この場合のように、例外情報のようなヒービング オブジェクトを保持するために Session を使用することはお勧めできません。

したがって、エラー ページに最適な方法でカスタム オブジェクトを渡すことができるアプローチを探しています。

私は使用する際にいくつかの助けを探しています:

  • JSON (クエリ文字列を使用)
  • Javascript または
  • セッションコンテキストを使用せずにカスタムオブジェクトをエラーページに渡すことができる他の方法。
4

2 に答える 2

1

ELMAH と Windows Azure テーブル ストレージの使用については、Wades のブログ「Using ELMAH in Windows Azure with Table Storage」を参照してください: http://www.wadewegner.com/2011/08/using-elmah-in-windows- azure-with-table-storage/

于 2012-04-22T20:46:21.980 に答える
1

代わりに Server.Transfer を使用して、エラー ページに移動できます。これにより、( HttpContext.Items コレクションを使用して)メモリ内でページの状態を維持できます。ただし、状況によっては出力キャッシュを無効にする必要があります。HttpContext.AllErrorsリストには、要求中にスローされたすべての例外が既に含まれています。

エラーの詳細を照会し、テーブルに到着する新しいメッセージに基づいてイベントを設定できるため、Azure テーブルにエラーの詳細を格納する方が優れたソリューションになります。ここで考えられる問題は、そもそも Azure テーブル ストレージが例外の原因であった場合です。

最善の解決策は、Azure Diagnosticsを使用してイベントを収集することです。これらは、一定の間隔で自動的にストレージに転送されるように構成できます。

于 2012-04-22T13:19:39.330 に答える