/*------------------------------------------------ ----------------
※著作権(C)
* 無断転載を禁じます。
*
* ファイル名:ErrorManager.cs
* 機能説明: asp.net の統合エラー修復。このカテゴリに一致するには、error.aspx などのエラー情報表示ページを追加する必要があります。
*
* 使用方法: 1. Application_Start() でタイマーを開始します (定期的にエラー情報をクリアします): ErrorManager.Instance.Start(),
* デフォルトでは、12 時間ごとに実行されるか、ErrorManager.Instance.SetTimerInterval() を使用して設定されます。
* 2. Application_Error() では、エラーが発生した場合、エラー情報を保存し、error.aspx に移動してエラーを表示します。
* 文字列キー = ErrorManager.Instance.AddError();
* Response.Redirect("error.aspx?key=" + key);
* 3. error.aspx の URL を通じて渡されたキーからエラー メッセージを取得して表示します。
* 文字列 err = ErrorManager.Instance.GetError(key)
* err の最初の 19 文字はエラーが発生した時刻で、その後にエラー メッセージが続きます。
* 4. Session[key] が null であるというエラー メッセージを返すのではなく、セッション タイムアウト エラーをキャッチするために、このクラスは GetSession() を追加します。
* および SetSession 関数を使用してセッションを統一的に管理します。将来的には、Session を aspx で直接読み取ることはできなくなり、このクラスを介して読み取る必要があります。
*
*
*ロゴの作成:
*
*ロゴを変更:
*説明を変更:
*
*ロゴを変更:
*説明を変更:
*------------------------------------------------ - --------------*/
システムを使用する;
System.Data を使用します。
System.Configuration を使用します。
System.Web を使用します。
System.Web.Security を使用します。
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls を使用します。
System.Collections を使用します。
/**//// <概要>
/// エラーの概要説明
/// </概要>
パブリック クラス ErrorManager
{
プライベート System.Timers.Timer m_timer;
プライベートハッシュテーブル m_htErr;
/**//// <概要>
/// プライベートコンストラクター
/// </概要>
privateErrorManager()
{
this.m_timer = 新しい System.Timers.Timer();
this.m_timer.Enabled = false;
this.m_timer.Interval = 12 * 60 * 60 * 1000 //デフォルトでは 12 時間ごとに実行されます。
this.m_timer.Elapsed += 新しい System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this.m_htErr = 新しいハッシュテーブル();
}
/**//// <概要>
/// シングルトンモードインターフェース
/// </概要>
public static readonly ErrorManager Instance = new ErrorManager();
/**//// <概要>
/// タイマーの頻度をミリ秒単位で設定します
/// </概要>
/// <param name="Interval">ミリ秒</param>
public void SetTimerInterval(int Interval)
{
this.m_timer.Interval = 間隔;
}
/**//// <概要>
/// タイマーが開始されます
/// </概要>
public void TimerStart()
{
this.m_timer.Enabled = true;
}
/**//// <概要>
/// タイマーが終了する
/// </概要>
public void TimerStop()
{
this.m_timer.Enabled = false;
}
/**//// <概要>
/// エラーが発生しました。エラー情報を保存し、ページ上で読みやすいようにエラー ID を返します。
/// </概要>
/// <returns>間違った ID を返す</returns>
パブリック文字列AddError()
{
文字列キー = Guid.NewGuid().ToString();
string msg = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ HttpContext.Current.Server.GetLastError().GetBaseException().Message;
this.m_htErr.Add(key, msg);
HttpContext.Current.Server.ClearError();
キーを返します。
}
/**//// <概要>
/// 指定されたキーのエラー メッセージを返します。最初の 19 文字はエラーが発生した時刻です。
/// </概要>
/// <param name="key">キーは guid です</param>
/// <returns>エラーメッセージを返す</returns>
パブリック文字列 GetError(文字列キー)
{
this.m_htErr[key].ToString() を返します。
}
/**//// <概要>
/// ハッシュテーブル内のエラー情報を定期的にクリアします
/// </概要>
/// <param name="sender"></param>
/// <param name="e"></param>
private void m_timer_Elapsed(オブジェクト送信者、System.Timers.ElapsedEventArgs e)
{
ArrayList リスト = new ArrayList();
ロック(this.m_htErr)
{
現在の日付時刻 = DateTime.Now;
タイムスパン ts;
foreach (this.m_htErr.Keys の文字列キー)
{
//最初の 19 文字はエラーが発生した日付です (yyyy-MM-dd HH:mm:ss)
文字列時間 = this.m_htErr[key].ToString().Substring(0, 19);
ts = 今 - Convert.ToDateTime(時間);
if (ts.TotalMinutes > 20) // ハッシュテーブルから 20 分前のエラー情報をクリアします
list.Add(キー);
foreach
(リスト内の文字列キー)
{
this.m_htErr.Remove(key);
}
}
}
セッション操作のカプセル化#region セッション操作のカプセル化
/**//// <概要>
/// 指定されたキー値のセッションを取得します
/// </概要>
/// <param name="key">キー値</param>
/// <returns>キーコンテンツの値</returns>
パブリック オブジェクト GetSession(文字列キー)
{
オブジェクト val = HttpContext.Current.Session[キー];
if (val == null)
throw new Exception("ページがタイムアウトしました。再度ログインしてください。")
;
}
/**//// <概要>
/// セッションをセットアップする
/// </概要>
/// <param name="key">キー値</param>
/// <param name="val">キーコンテンツ</param>
public void SetSession(文字列キー, オブジェクト値)
{
HttpContext.Current.Session[キー] = val;
}
#エンドリージョン
}
http://www.cnblogs.com/81/archive/2006/08/16/478175.html