在asp.net 2.0中,可以使用healthmonitoring属性监测事件。healthmonitoring属性是一个基于方法的provider,在这里可以构造自己的provider。利用healthmonitoring属性,我们可以诸如记录错语、成功的事件等,对不同的数据源,如事件日志,sql server甚至对于自己通过继承webeventprovider类创建自己的providers。在此文章中,我打算介绍配置一个监测sqlserver错语的并且对某人的电子信箱地址发送邮件的web应用程序。首先,看一下在web.config中的healthmonitoring程序片段,在此可以建立将要用到的事件。
<healthmonitoring enabled="true|false" 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而工作,它将事件存储在aspnet_web_event表。为了安装此数据库,必须运行位于framework文件夹中的aspnet_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();}
以上就是asp.net中healthmonitor属性的用法教程的详细内容。