欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET中用healthMonitor属性用法

程序员文章站 2023-08-14 16:19:17
  在asp.net 2.0中,可以使用healthmonitoring属性监测事件。healthmonitoring属性是一个基于方法的provider,在这里可以构造自...

  在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 ..." 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();
}