在ASP.NET 2.0中,可以使用healthMonitoring属性监测事件。healthMonitoring属性是一个基于方法的provider,在这里可以构造自己的provider。利用healthMonitoring属性,我们可以诸如记录错语、成功的事件等,对不同的数据源,如事件日志,Sql Server甚至对于自己通过继承WebEventProvider类创建自己的providers。在此文章中,我打算介绍配置一个监测SqlServer错语的并且对某人的电子信箱地址发送邮件的web应用程序。首先,看一下在web.config中的healthMonitoring程序片段,在此可以建立将要用到的事件。
1<healthmonitoring enabled="true|false" heartbeatinterval="time interval">
2<buffermodes>... </buffermodes>
3<providers>... </providers>
4<eventmappings>... </eventmappings>
5<profiles>... </profiles>
6<rules>... </rules>
7</healthmonitoring>
如果看一下
1<healthmonitoring>元素,就可以判断是否可以将设置属性为有效或无效,也可以指定对WebHeaderBeatEvent被唤醒的时间间隔。healthMonitoring有5个孩子。
2
3bufferModes,在此可以定义一个Provider的缓冲区大小。
4
5Providers,在此说明处理事件的Providers。
6
7eventMappings, 在此可以画出与友好事件类型相关的事件名称。
8
9profiles, 在此定义一个可以用来配置事件的参数集集合。
10
11rules, 在此画出Providers的事件图。
12
13可以阅读更多含在VS 2550文档中的关于这些元素的东西。
14
15在继续之前,这里有一份含ASP.NET中的一些Providers清单:
16
17System.Web.Management.MailWebEventProvider
18System.Web.Management.SimpleMailWebEventProvider
19System.Web.Management.TemplatedMailWebEventProvider
20System.Web.Management.TraceWebEventProvider
21System.Web.Management.EventLogWebEventProvider
22System.Web.Management.SqlWebEventProvider
23System.Web.Management.WmiWebEventProvider
24
25不需要解释这些,名字告诉我们它们是干什么的。还要提一下SqlWebEventProvider依靠Sql server而工作,它将事件存储在aspnet_Web_Event表。为了安装此数据库,必须运行位于framework文件夹中的aspnet_regsql.exe向导。
26
27现在,配置对Sql server provider有登录错语并且发送一个电子邮件而产生错误的程序。
28
29下面是一个使用SqlWebEventProvider和SimpleMailWebEventProvider来存错语事件的例子。
30
31<healthmonitoring enabled="true" heartbeatinterval="0">
32<buffermodes>
33<add maxbuffersize="100" maxbufferthreads="1" maxflushsize="20" name="Critical Notification" regularflushinterval="Infinite" urgentflushinterval="00:01:00" urgentflushthreshold="1"></add>
34<add maxbuffersize="1000" maxbufferthreads="1" maxflushsize="100" name="Analysis" regularflushinterval="00:05:00" urgentflushinterval="00:01:00" urgentflushthreshold="100"></add>
35</buffermodes>
36<providers>
37<add bodyfooter="Please investigate ASAP." bodyheader="Warning!" buffer="true" buffermode="Critical Notification" from="[email protected]" maxeventlength="4096" maxmessagespernotification="1" maxsize="4096" name="CriticalMailEventProvider" priority="High" subjectprefix="Action required." to="[email protected]" type="System.Web.Management.SimpleMailWebEventProvider, System.Web ..."></add>
38<add buffer="true" buffermode="Analysis" connectionstringname="LocalSqlServer" maxeventdetailslength="1073741823" name="SqlWebEventProvider" type="System.Web.Management.SqlWebEventProvider, System.Web ..."></add>
39</providers>
40<eventmappings>
41<add name="All Errors" type="System.Web.Management.WebBaseErrorEvent, System.Web ..."></add>
42<add default"="" maxlimit="Infinite" mininstances="1" mininterval="00:10:00" name="Request Processing Errors" type="System.Web.Management.WebRequestErrorEvent, System.Web .../>
43
44</eventMappings>
45
46<profiles>
47
48<add name="></add>
49
50<rules>
51<add eventname="All Errors" mininterval="00:00:30" name="All Errors Default" profile="Default" provider="SqlWebEventProvider"></add>
52<add eventname="Request Processing Errors" name="Request Processing Errors" profile="Default" provider="CriticalMailEventProvider"></add>
53</rules>
54</eventmappings></healthmonitoring>
55
56在此例子中,使用Sql provider来记录所有错语事件,并且当Web请求错误事件被唤醒时使用mail provider来发送一个消息。
57
58这里有一些ASP .NET 2.0一起发布的事件:
59
60System.Web.Management.WebBaseEvent
61System.Web.Management.WebHeartBeatEvent
62System.Web.Management.WebApplicationLifetimeEvent
63System.Web.Management.WebRequestEvent
64System.Web.Management.WebBaseErrorEvent
65System.Web.Management.WebErrorEvent
66System.Web.Management.WebRequestErrorEvent
67System.Web.Management.WebAuditEvent
68System.Web.Management.WebFailureAuditEvent
69System.Web.Management.WebSuccessAuditEvent
70System.Web.Management.WebManagementEvent
71System.Web.Management.WebViewStateFailureAuditEvent
72System.Web.Management.WebAuthenticationFailureAuditEvent
73System.Web.Management.WebAuthenticationSuccessAuditEvent
74
75可以使用这些事件来对一个provider画图。也可以创建通过WebBaseEvent类继承来的自己的事件。
76
77为自动唤醒一个事件,可以使用WebBaseEvent类的唤醒方法:
78
79try
80{
81//....
82}
83
84catch(Exception e)
85{
86if (HealthMonitoringManager.Enabled)
87{
88WebBaseEvent.Raise(new WebErrorEvent("My Error message", null, 5000, e));
89}
90}
91
92or:
93
94if (HealthMonitoringManager.Enabled)
95{
96WebErrorEvent event = new WebErrorEvent("My error message", null, 5000, e);
97event.Raise();
98}</healthmonitoring>