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

















