当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET中用healthMonitor属性用法

ASP.NET中用healthMonitor属性用法

2018年04月29日  | 移动技术网IT编程  | 我要评论

南通职业大学图书馆,上汽通用,阿匹克斯

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网