在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″ </buffermodes> <add name=”criticalmaileventprovider” type=”system.web.management.simplemailwebeventprovider, system.web …” from=info@nsquared2.net to=fnormen@hotmail.com priority=”high” bodyheader=”warning!” <add name=”sqlwebeventprovider” type=”system.web.management.sqlwebeventprovider, system.web …” </providers> <eventmappings> <add name=”all errors” type=”system.web.management.webbaseerrorevent, 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” <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) or: if (healthmonitoringmanager.enabled) |