ASP.NET項目開發(fā)中健康監(jiān)視淺析
健康監(jiān)視(Health Monitoring),Health Monitoring是ASP.NET2.0以后版本添加的新的特性。它可以允許開發(fā)人員監(jiān)視應(yīng)用程序中發(fā)生的異常的事件。而且監(jiān)視應(yīng)用程序的啟動,關(guān)閉,驗證等都有相對應(yīng)的事件來監(jiān)視。而且我們還可以創(chuàng)建自定義的事件來監(jiān)視應(yīng)用程序中的特定的部分。我們也可以在Health Monitoring中配置把應(yīng)用程序中的異常是記錄在系統(tǒng)的日志中還是Sql Server中,或者是以Email形式發(fā)送出去。最重要的一點就是:只要通過配置,我們可以少寫,甚至不寫代碼就可以實現(xiàn)強大的異常處理策略(和類似Enterprise Application Blocks,我們后面會提到的)。
同樣,我們還是在web.config中添加配置,在system.web節(jié)點中添加﹤healthMonitoring /﹥節(jié)點:
默認(rèn)情況下是禁用的,我們啟用就應(yīng)該如下:
ASP.NET項目開發(fā)中健康監(jiān)視Code1
- ﹤healthMonitoring enabled=”true﹥
- ﹤eventMappings﹥﹤/eventMappings﹥
- ﹤providers﹥﹤/providers﹥
- ﹤rules﹥..﹤/rules﹥
- ﹤profiles﹥..﹤/profiles﹥
- ﹤bufferModes﹥..﹤/bufferModes﹥
- ﹤/healthMonitoring﹥
下面就看看該節(jié)點下的一些配置:
eventMappings節(jié)點通過指定事件類型來注冊事件類。也就說,要注明我們在應(yīng)用程序中要監(jiān)聽哪些事件,如下配置:
- ﹤eventMappings﹥
- ﹤clear /﹥
- ﹤add name=”CustomException” type=”System.Web.Management.WebBaseErrorEvent” /﹥
- ﹤/eventMappings﹥
前面的"name"屬性是我們自己為后面的事件取的友好的名稱,從﹤eventMappings﹥的字面意思也可以知道:事件的映射。
后面的"type"就是我們要在程序中監(jiān)聽的事件。之前也說過,我們可以監(jiān)聽很多的事件:系統(tǒng)的啟動,關(guān)閉,驗證失敗等。
如上所見:"System.Web.Management.WebBaseErrorEvent" 是所有事件的基類。它的子類有很多:
WebApplicationLifetimeEvent--在應(yīng)用程序的運行過程觸發(fā)的事情,如,當(dāng)應(yīng)用程序開啟,關(guān)閉時
WebAuthenticationFailureAuditEvent--當(dāng)ASP.NET驗證失敗是觸發(fā)
WebAuthenticationSuccessAuditEvent--驗證成功時觸發(fā)
WebRequestErrorEvent--請求出錯時觸發(fā)
除此之外,我們還可以自定義一些類,派生自基類。
當(dāng)我們確定了要監(jiān)聽的事件之后,我們就要選擇事件的provider,也就說,事件觸發(fā)后,我們把事情的信息記錄到那里。
配置如下:
- ﹤providers﹥
- ﹤clear /﹥
- ﹤add name=”EventLogProvider” type=”System.Web.Management.EventLogWebEventProvider” /﹥
- ﹤/providers﹥
這之前一樣:System.Web.Management.EventLogWebEventProvider是個基類,有很多的子類,這些子類可以使得我們把異常的記錄在如sql數(shù)據(jù)庫中,系統(tǒng)日志中等:
SqlWebEventProvider--把異常信息記錄到數(shù)據(jù)庫中的提供程序
SimpleMailEventProvider--把異常信息通過Email發(fā)送的提供程序
還有一些,大家參看MSDN。
好了,到這里,我們把要監(jiān)聽的事件選擇好了,如要監(jiān)聽WebApplicationLifetimeEvent,WebRequestErrorEvent;而且我們也準(zhǔn)備把異常系統(tǒng)通過Email發(fā)送,我們選擇了SimpleMailEventProvider,通過也想把異常記錄到數(shù)據(jù)庫中,我們也選擇了SqlWebEventProvider。那么我們的配置就如下:
ASP.NET項目開發(fā)中健康監(jiān)視Code2
- ﹤healthMonitoring enabled=”true﹥
- ﹤eventMappings﹥
- ﹤clear /﹥
- ﹤add name=”CustomException” type=”System.Web.Management.WebApplicationLifetimeEvent” /﹥
- ﹤add name=”AnotherException" type=”System.Web.Management.WebRequestErrorEvent” /﹥
- ﹤/eventMappings﹥
- ﹤providers﹥
- ﹤clear /﹥
- ﹤add name=”EmailProvider” type=”System.Web.Management.SimpleMailEventProvider” /﹥
- ﹤add name=”SqlProvider” type=”System.Web.Management.WebRequestErrorEvent” /﹥
- ﹤/providers﹥
- ﹤/healthMonitoring﹥
注意:providers節(jié)點中的"name"屬性也是我們自己取的友好的名稱。
好了,該定義的定義好了,現(xiàn)在還是不能按照我們的要求工作,那是因為我們還缺少一個"規(guī)則":
如下:
ASP.NET項目開發(fā)中健康監(jiān)視Code3
- ﹤rules﹥
- ﹤clear /﹥
- ﹤add name=”Unhandled Exceptions Rule”
- eventName=”Unhandled Exceptions”
- provider=”EventLogProvider”
- profile=”Default”
- minInstances=”1”
- maxLimit=”Infinite”
- minInterval=”00:00:00” /﹥
- ﹤/rules﹥
實際上,rules就是把我們之前定義的要監(jiān)聽的事件和相應(yīng)的provider對象上來:
- ﹤rules﹥
- ﹤clear /﹥
- ﹤add name=”MyRules1”
- eventName=”CustomException”
- provider=”EmailProvider”
- profile=”Default”
- minInstances=”1”
- maxLimit=”Infinite”
- minInterval=”00:00:00” /﹥
- ﹤/rules﹥
注意上面的name屬性,其實和之前一樣,我們是給這個規(guī)則取個名字而已。eventName就是之前我們定義的事件名稱,如"CustomException",provider為之前定義的“EmailProvider” ,本條規(guī)則就是說,讓EmailProvider來處理CustomException的異常信息。其他的同理。
***一點要注意的就是:如果我們決定發(fā)送Email,那么我們還要配置節(jié)點:
- ﹤system.net﹥
- ﹤mailSettings﹥
- ﹤smtp deliveryMethod=”PickupDirectoryFromIis”﹥
- ﹤network defaultCredentials=”true” host=”127.0.0.1” /﹥
- ﹤/smtp﹥
- ﹤/mailSettings﹥
- ﹤/system.net﹥
這樣就行了。
ASP.NET項目開發(fā)中健康監(jiān)視的基本信息就向你介紹到這里,希望這樣的介紹對你理解ASP.NET項目開發(fā)中健康監(jiān)視有所幫助。
【編輯推薦】