在asp.net 2.0中,可以使用healthmonitoring属性监测事件。healthmonitoring属性是一个基于方法的provider,在这里可以构造自己的provider。利用healthmonitoring属性,我们可以诸如记录错语、成功的事件等,对不同的数据源,如事件日志,sql server甚至对于自己通过继承webeventprovider类创建自己的providers。在此文章中,我打算介绍配置一个监测sqlserver错语的并且对某人的电子信箱地址发送邮件的web应用程序。首先,看一下在web.config中的healthmonitoring程序片段,在此可以建立将要用到的事件。
<healthmonitoring enabled="truefalse" heartbeatinterval="time interval">
<buffermodes>... </buffermodes>
<providers>... </providers>
<eventmappings>... </eventmappings>
<profiles>... </profiles>
<rules>... </rules>
</healthmonitoring>
如果看一下<healthmonitoring>元素,就可以判断是否可以将设置属性为有效或无效,也可以指定对webheaderbeatevent被唤醒的时间间隔。healthmonitoring有5个孩子。
buffermodes,在此可以定义一个provider的缓冲区大小。
providers,在此说明处理事件的providers。
eventmappings, 在此可以画出与友好事件类型相关的事件名称。
profiles, 在此定义一个可以用来配置事件的参数集集合。
rules, 在此画出providers的事件图。
可以阅读更多含在vs 2550文档中的关于这些元素的东西。
在继续之前,这里有一份含asp.net中的一些providers清单:
system.web.management.mailwebeventprovider
system.web.management.simplemailwebeventprovider
system.web.management.templatedmailwebeventprovider
system.web.management.tracewebeventprovider
system.web.management.eventlogwebeventprovider
system.web.management.sqlwebeventprovider
system.web.management.wmiwebeventprovider
不需要解释这些,名字告诉我们它们是干什么的。还要提一下sqlwebeventprovider依靠sql server而工作,它将事件存储在as.net_web_event表。为了安装此数据库,必须运行位于framework文件夹中的as.net_regsql.exe向导。
现在,配置对sql server provider有登录错语并且发送一个电子邮件而产生错误的程序。
下面是一个使用sqlwebeventprovider和simplemailwebeventprovider来存错语事件的例子。
<healthmonitoring enabled="true" heartbeatinterval="0">
<buffermodes>
<add name="critical notification" maxbuffersize="100" maxflushsize="20"urgentflushthreshold="1" regularflushinterval="infinite" urgentflushinterval="00:01:00" maxbufferthreads="1"/>
<add name="analysis" maxbuffersize="1000" maxflushsize="100" urgentflushthreshold="100"
regularflushinterval="00:05:00" urgentflushinterval="00:01:00" maxbufferthreads="1"/>
</buffermodes>
<providers>
<add name="criticalmaileventprovider" type="system.web.management.simplemailwebeventprovider, system.web ..." from=info@nsquared2.net to=fnormen@hotmail.com priority="high" bodyheader="warning!"
bodyfooter="please investigate asap." subjectprefix="action required." buffer="true" buffermode="critical notification" maxeventlength="4096" maxsize="4096" maxmessagespernotification="1"/>
<add name="sqlwebeventprovider" type="system.web.management.sqlwebeventprovider, system.web ..."
connectionstringname="localsqlserver" maxeventdetailslength="1073741823" buffer="true"
buffermode="analysis"/>
</providers>
<eventmappings>
<add name="all errors" type="system.web.management.webbaseerrorevent, system.web ..."/>
<add name="request processing errors" type="system.web.management.webrequesterrorevent, system.web .../>
</eventmappings>
<profiles>
<add name="default" mininstances="1" maxlimit="infinite" mininterval="00:10:00"/>
</profiles>
<rules>
<add name="all errors default" eventname="all errors" provider="sqlwebeventprovider" profile="default"
mininterval="00:00:30"/>
<add name="request processing errors" eventname="request processing errors" provider="criticalmaileventprovider" profile="default"/>
</rules>
</healthmonitoring>
在此例子中,使用sql provider来记录所有错语事件,并且当web请求错误事件被唤醒时使用mail provider来发送一个消息。
这里有一些asp .net 2.0一起发布的事件:
system.web.management.webbaseevent
system.web.management.webheartbeatevent
system.web.management.webapplicationlifetimeevent
system.web.management.webrequestevent
system.web.management.webbaseerrorevent
system.web.management.weberrorevent
system.web.management.webrequesterrorevent
system.web.management.webauditevent
system.web.management.webfailureauditevent
system.web.management.websuccessauditevent
system.web.management.webmanagementevent
system.web.management.webviewstatefailureauditevent
system.web.management.webauthenticationfailureauditevent
system.web.management.webauthenticationsuccessauditevent
可以使用这些事件来对一个provider画图。也可以创建通过webbaseevent类继承来的自己的事件。
为自动唤醒一个事件,可以使用webbaseevent类的唤醒方法:
try
{
//....
}
catch(exception e)
{
if (healthmonitoringmanager.enabled)
{
webbaseevent.raise(new weberrorevent("my error message", null, 5000, e));
}
}
or:
if (healthmonitoringmanager.enabled)
{
weberrorevent event = new weberrorevent("my error message", null, 5000, e);
event.raise();
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器