ASP.NET 3.5コアプログラミング学習ノート(8):エラー処理、ページ追跡

14563 ワード

ページエラーの処理
  ASP.NETは、ページレベルとアプリケーションレベルの2つのレベルのグローバル例外ブロックポイントを提供します.
ベースクラスPageはErrorイベントを暴露し、ページの実行中に発生した未処理の例外をキャプチャするためにページに書き換えることができます.
HttpApplicationクラスにもErrorイベントがあり、アプリケーション全体で放出された未処理の例外をすべてキャプチャします.
ページレベルエラー処理
特定のページの未処理例外をキャプチャするには、以下のようにErrorイベントのハンドラを定義する必要があります.

  
    
protected void Page_Error( object sender, EventArgs e)
{
Exception ex
= server.GetLastError();

if (ex is NotImplementedException)
Server.Transfer(
" /errorpages/notimplementexception.aspx " );
else
Server.Transfer(
" /errorpages/apperror.aspx " );

Server.ClearError();
}

サーバオブジェクトのGetLastErrorメソッドにより,誘起された異常を取得できる.サーバーを通過する場合.Transferはコントロールを転送し、異常情報は保持され、エラーページはGetLastErrorを呼び出し、より詳細な情報を表示します.最後に、すべての例外処理が完了したら、ClearErrorを呼び出してエラーをクリアします.
エラーメッセージを表示するときは、悪意のあるユーザーがシステムに攻撃をかけるのを防止するために、機密情報を公開しないように注意してください.ページをより柔軟にして、ユーザーがローカルにいるかどうか、カスタムヘッダーを選択しているかどうかを判断し、エラーの診断に役立つ詳細を表示できます.

  
    
if (Request.UserHostAddress == " 127.0.0.1 " )
{
......
}

Requestを使用できます.Headersコレクションは、カスタムヘッダ情報をチェックします.カスタムヘッダーを追加するには、アプリケーションインターネット情報サービス(IIS)仮想ディレクトリのプロパティに電話し、HTTPヘッダータブをクリックします.
グローバルエラー処理
globalを追加します.asaxファイルをプログラムに、定義済みのApplication_Errorメソッドでは、コードを記述します.

  
    
void Application_Error( object sender, EventArgs e)
{
......
}

管理者にEメールを送信したり、Windowsイベントログに書き込んだりするなど、イベントハンドラで意味のあることをすることができます.
エラーとページマッピング
未処理異常が呼び出しスタックの終端に到達と、ASP.NETはデフォルトのページを生成し、黄色い画面を表示します.アプリケーションwebを介して.configファイルのセグメントは、開発者がASP.NETという機能は十分にカスタマイズされています.

  
    
< configuration >
< system.web >
......
< customErrors mode = " RemoteOnly " defaultRedirect = " /GerericError.aspx " />
</ system.web >
</ configuration >

エラーが何であれ、ASP.NETはユーザーをGenericErrorにリダイレクトします.aspxページ.
ユーザーを共通のエラーページにリダイレクトする以外は、ASP.NETでは、次の例のように、発生した異なるHTTPエラーに対して、対応するカスタムページを表示することもできます.

  
    
< configuration >
< system.web >
< customErrors mode = " On " defaultRedirect = " /GenericError.aspx " >
< error statusCode = " 404 " redirect = " /ErrorPages/Error404.aspx " />
< error statusCode = " 500 " redirect = " /ErrorPages/Error500.aspx " />
</ customErrors >
</ system.web >
</ configuration >

下地ASP.NETがエラーページを呼び出すと、エラーが発生したページのURLが入力されます.例:

  
    
public partial class Error404 : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
object o = Request.QueryString[ " AspxErrorPath " ];

if (o != null )
{
......
}
}
}

アプリケーション・レベルのエラー・ハンドラ、ページ・レベルのハンドラ、およびさまざまなリダイレクトが同時に存在する場合、どちらが優先されますか?アプリケーション・レベルのプロセッサは、他のプロセッサよりも優先されます.ページレベルコードは、すべてのコードがHTTP 500内部エラーを処理した後に実行されます.
ASP.NETトラッキング
  .NETには豊富なプログラム追跡ツールセットがあります.特にSystems.Diagnosticsネーミングスペースで定義されたTraceクラスとDebugクラス.この2つのクラスは基本的に同じで、リスナーモジュールに基づいています.リスナーはドライバとして、追跡されたメッセージを収集し、特定のメディアに格納します.
ページトラッキングの有効化方法
私たちはアプリケーションのwebにいます.configファイルでtraceプロパティを切り替えるスイッチの状態:

  
    
< configuration >
< system.web >
< trace enabled = " true " pageOutput = " true " />
</ system.web >
</ configuration >

PageOutputプロパティは、出力をページに表示するかどうかを示すために使用されます.pageOutputがfalseに設定場合、トレース出力は自動的にASPに送信.NETのトレースツール(trace.axd)にあります.
@Pageコマンドのtraceプロパティはデフォルトfalseで、trueの場合、トレース情報はページの下部に表示されます.
@Pageコマンドには、表示されるデータのソート方法を選択できるように、TraceModeプロパティも用意されています.可能な値はSotrByCategoryとSortByTime、デフォルト値はSortByTImeです.
Pageクラスには、上記の@Page命令属性に対応する2つの属性TraceModeValueとTraceEnabledが用意されています.
Pageクラスのトレースに関連する3番目のプロパティはTraceで、TraceContextクラスのインスタンスを返します.TraceContextクラスのメソッドにより、ASP.NETページにトレースログを追加します.HTTPリクエストが作成されると、クラスのインスタンスが作成されます.トレースオブジェクトは、HttpContextクラスのトレース属性によって露出されます.
TraceContextクラスのIsEnabled属性はトレースがオンになっているかどうかを表し、TraceMode属性はトレースがページに記録されている配列パターンを表します.
TraceContextクラスのWriteメソッドとWarnメソッドはメッセージを出力します.この2つのメソッドは基本的に同じです.唯一の違いはWarn出力メッセージが赤色であることです.
WriteメソッドとWarnメソッドを使用して転送されたテキストは、HTMLページに表示されますが、HTMLフォーマットラベルは処理されません.このテキストは純粋なテキストの形式で書かれています.太字を取得するには、トレースメッセージのサブ文字列におよびを直接追加します.
外部クラスが現在のHTTPリクエストのトレースログにテキストを送信する場合は、次のように表現できます.
  System.Web.HttpContext.Current.Trace.Write(category, msg);
アプリケーショントラッキング機能が有効になると、各ページリクエストは特定のページのトラッキング情報をビューアに転送します.アプリケーションのルートディレクトリでtraceを要求できます.axdは、http://localhost:1105/Core35/Trace.axdなどのトレースビューアを開きます.
トレース・ビューアがキャッシュできるリクエストの数は、requestLimitプロパティによって制限されます(デフォルトは10).例:

  
    
< system.web >
< trace enable = " true " requestList = " 20 " />
</ system.web >

トレース・ビューアは、すべてのリクエストを自動的にトレースし、各リクエストの完全なトレース情報をキャッシュします.現在のトレース情報が手動で削除されない限り、リクエスト数が上限に達すると、他のリクエストはキャッシュされません.