81
简单就是美!
博客园
首页
新随笔
新文章
联系
订阅
管理
posts - 136, comments - 384, trackbacks - 0
asp.net错误处理封装
/**/
/*
----------------------------------------------------------------
* Copyright (C)
* 版权所有。
*
* 文件名 :ErrorManager.cs
* 功能描述:asp.net中统一的错误修理,与本类相配套需要增加一个错误信息显示页面,如error.aspx
*
* 使用说明:1. 在Application_Start()中启动定时器(定时清空错误信息):ErrorManager.Instance.Start(),
* 默认12小时运行一次,或用ErrorManager.Instance.SetTimerInterval()设置。
* 2. 在Application_Error()中,当发生错误时,保存这个错误信息并转到error.aspx中显示这个错误
* string key = ErrorManager.Instance.AddError();
* Response.Redirect("error.aspx?key=" + key);
* 3. 在error.aspx中通过url传来的key,取得并显示错误信息:
* string err = ErrorManager.Instance.GetError(key)
* err中前19个字符是错误发生的时间,后面是错误信息。
* 4. 为了捕捉Session超时的错误,而不是返回Session[key]是null的错误信息,本类增加了GetSession()
* 和SetSession函数来统一管理Session,以后aspx中不能直接读取Session,而必须通过本类来读取。
*
*
* 创建标识:
*
* 修改标识:
* 修改描述:
*
* 修改标识:
* 修改描述:
*----------------------------------------------------------------
*/
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
System.Collections;
/**/
///
<summary>
///
Summary description for Error
///
</summary>
public
class
ErrorManager
{
private
System.Timers.Timer m_timer;
private
Hashtable m_htErr;
/**/
///
<summary>
///
私有的构造函数
///
</summary>
private
ErrorManager()
{
this
.m_timer
=
new
System.Timers.Timer();
this
.m_timer.Enabled
=
false
;
this
.m_timer.Interval
=
12
*
60
*
60
*
1000
;
//
默认12个小时执行一次
this
.m_timer.Elapsed
+=
new
System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this
.m_htErr
=
new
Hashtable();
}
/**/
///
<summary>
///
单例模式的接口
///
</summary>
public
static
readonly
ErrorManager Instance
=
new
ErrorManager();
/**/
///
<summary>
///
设置定时器的频率,单位是毫秒
///
</summary>
///
<param name="Interval">
毫秒
</param>
public
void
SetTimerInterval(
int
Interval)
{
this
.m_timer.Interval
=
Interval;
}
/**/
///
<summary>
///
定时器开始
///
</summary>
public
void
TimerStart()
{
this
.m_timer.Enabled
=
true
;
}
/**/
///
<summary>
///
定时器结束
///
</summary>
public
void
TimerStop()
{
this
.m_timer.Enabled
=
false
;
}
/**/
///
<summary>
///
发生了一个错误,把错误信息保存起来,并返回错误的id,便于页面中读取
///
</summary>
///
<returns>
返回错误的id
</returns>
public
string
AddError()
{
string
key
=
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();
return
key;
}
/**/
///
<summary>
///
返回指定Key的错误信息,前19个字符是错误发生的时间
///
</summary>
///
<param name="key">
key,是一个guid
</param>
///
<returns>
返回错误信息
</returns>
public
string
GetError(
string
key)
{
return
this
.m_htErr[key].ToString();
}
/**/
///
<summary>
///
定时在Hashtable中清理错误信息
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
m_timer_Elapsed(
object
sender, System.Timers.ElapsedEventArgs e)
{
ArrayList list
=
new
ArrayList();
lock
(
this
.m_htErr)
{
DateTime now
=
DateTime.Now;
TimeSpan ts;
foreach
(
string
key
in
this
.m_htErr.Keys)
{
//
前19个字符是错误发生的日期,yyyy-MM-dd HH:mm:ss
string
time
=
this
.m_htErr[key].ToString().Substring(
0
,
19
);
ts
=
now
-
Convert.ToDateTime(time);
if
(ts.TotalMinutes
>
20
)
//
把20分钟前的错误信息从hashtable中清除
list.Add(key);
}
foreach
(
string
key
in
list)
{
this
.m_htErr.Remove(key);
}
}
}
Session操作的封装
#region
Session操作的封装
/**/
///
<summary>
///
取得指定键值的Session
///
</summary>
///
<param name="key">
键值
</param>
///
<returns>
键内容值
</returns>
public
object
GetSession(
string
key)
{
object
val
=
HttpContext.Current.Session[key];
if
(val
==
null
)
throw
new
Exception(
"
页面超时,请重新登录。
"
);
return
val;
}
/**/
///
<summary>
///
设置Session
///
</summary>
///
<param name="key">
键值
</param>
///
<param name="val">
键内容
</param>
public
void
SetSession(
string
key,
object
val)
{
HttpContext.Current.Session[key]
=
val;
}
#endregion
}
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2006-08-16 10:02
81
阅读(537)
评论(1)
编辑
收藏
FeedBack:
478404
#1楼
2006-08-16 14:19
|
superstar
有什么用呀,还未弄懂用处到底如何!
回复
引用
查看
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
Google 突袭家庭娱乐领域:为什么说收购摩托罗拉在这里会起作用
·
分析师预测2016年过半搜索都来自移动设备
·
《纽约时报》:富士康问题犯错不只苹果
·
传微软拟新开4家专卖店 首家海外店今年开张
·
亚马逊否认近期将推出独立视频服务
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
<
2006年8月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
昵称:
81
园龄:
7年3个月
粉丝:
5
关注:
1
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔分类
C++Builder(11)
dotNet(12)
Emgu CV,OpenCV学习(4)
FreeBSD+PostgreSQL(10)
Ms SQL Server(5)
Oracle(9)
杂七杂八(54)
随笔档案
2012年2月 (1)
2012年1月 (3)
2011年12月 (7)
2011年11月 (1)
2011年10月 (1)
2011年9月 (1)
2011年7月 (1)
2011年6月 (1)
2011年4月 (5)
2011年3月 (5)
2011年2月 (9)
2011年1月 (3)
2010年12月 (2)
2010年6月 (3)
2010年5月 (2)
2010年3月 (4)
2010年2月 (1)
2010年1月 (2)
2009年12月 (7)
2009年11月 (3)
2009年10月 (3)
2009年9月 (2)
2009年8月 (5)
2009年7月 (11)
2009年6月 (5)
2009年1月 (1)
2008年12月 (4)
2008年11月 (1)
2008年9月 (1)
2007年12月 (1)
2007年6月 (2)
2007年5月 (2)
2007年4月 (4)
2007年3月 (3)
2007年1月 (2)
2006年12月 (1)
2006年11月 (2)
2006年10月 (1)
2006年8月 (3)
2006年6月 (1)
2006年5月 (3)
2006年4月 (1)
2006年3月 (2)
2006年1月 (2)
2005年9月 (4)
2005年8月 (2)
2005年7月 (1)
2005年2月 (2)
2004年11月 (2)
文章档案
2009年12月 (1)
积分与排名
积分 - 81495
排名 - 1261
最新评论
阅读排行榜
评论排行榜
推荐排行榜