/*------------------------------------------------ ----------------
* 저작권(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=" + 키);
* 3. error.aspx의 URL을 통해 전달된 키에서 오류 메시지를 얻고 표시합니다.
* 문자열 err = ErrorManager.Instance.GetError(key)
* err의 처음 19자는 오류가 발생한 시간이고 그 뒤에는 오류 메시지가 표시됩니다.
* 4. Session[key]가 null이라는 오류 메시지를 반환하는 대신 Session timeout 오류를 잡기 위해 이 클래스에는 GetSession()을 추가합니다.
* 및 SetSession 함수를 사용하여 Session을 균일하게 관리할 수 있습니다. 향후에는 Aspx에서 Session을 직접 읽을 수 없으며 반드시 이 클래스를 통해 읽어야 합니다.
*
*
*로고 만들기:
*
*로고 수정:
*설명 수정:
*
*로고 수정:
*설명 수정:
*------------------------------------------------ - --------------*/
시스템 사용;
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
/**//// <요약>
/// 개인 생성자
///
개인 오류 관리자()
{
this.m_timer = 새로운 System.Timers.Timer();
this.m_timer.Enabled = 거짓;
this.m_timer.Interval = 12 * 60 * 60 * 1000; //기본적으로 12시간마다 한 번씩 실행됩니다.
this.m_timer.Elapsed += new System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this.m_htErr = 새로운 해시테이블();
}
/**//// <요약>
/// 싱글톤 모드 인터페이스
///
public static readonly ErrorManager 인스턴스 = new ErrorManager()
/**////
/// 타이머의 빈도를 밀리초 단위로 설정합니다.
///
/// 밀리초
공개 무효 SetTimerInterval(int Interval)
{
this.m_timer.Interval = 간격;
}
/**//// <요약>
/// 타이머 시작
///
공공 무효 TimerStart()
{
this.m_timer.Enabled = true;
}
/**//// <요약>
/// 타이머 종료
///
공공 무효 TimerStop()
{
this.m_timer.Enabled = 거짓;
}
/**//// <요약>
/// 오류가 발생했습니다. 페이지에서 쉽게 읽을 수 있도록 오류 정보를 저장하고 오류 ID를 반환합니다.
///
///
공개 문자열 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()
;
}
/**//// <요약>
/// 지정된 Key의 오류 메시지를 반환합니다. 처음 19자는 오류가 발생한 시간입니다.
///
/// 키는 GUID입니다
///
공개 문자열 GetError(문자열 키)
{
return this.m_htErr[key].ToString();
}
/**//// <요약>
/// Hashtable의 오류 정보를 정기적으로 삭제합니다.
///
///
///
개인 무효 m_timer_Elapsed(개체 전송자, System.Timers.ElapsedEventArgs e)
{
ArrayList 목록 = 새로운 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(time);
if (ts.TotalMinutes > 20) //해시테이블에서 20분 전 오류 정보를 지웁니다.
목록.추가(키);
}
foreach(목록의 문자열 키)
{
this.m_htErr.Remove(key);
}
}
}
세션 작업 캡슐화#region 세션 작업 캡슐화
/**//// <요약>
/// 지정된 키 값의 세션을 가져옵니다.
///
/// 키 값
///
공개 객체 GetSession(문자열 키)
{
객체 val = HttpContext.Current.Session[key];
if (val == null)
throw new Exception("페이지 시간이 초과되었습니다. 다시 로그인하세요.")
return val;
}
/**//// <요약>
/// 세션 설정
///
/// 키 값
/// 핵심 내용
공개 무효 SetSession(문자열 키, 개체 값)
{
HttpContext.Current.Session[키] = 발;
}
#endregion
}
http://www.cnblogs.com/81/archive/2006/08/16/478175.html