ASP.NET 2.0 還提供了全功能的應用程序監視和健康監視。這個系統是由一個完全可擴展事件模型和一個能將事件發送到多種接收器的事件引擎組成的。舉例來說,您可以配置您的 ASP.Net 應用程序來每天發送電子郵件,表明服務器正在運行並且包括可用內存的數量。同樣,您可以創建一個鏈接到未處理異常的健康事件。異常內容、請求標題以及時間和日期都可以被發送到一個錯誤日志記錄數據庫。
ASP.Net 2.0 包含了內置的事件,包括心跳、應用程序生存期事件(啟動/停止/編譯)和錯誤陷阱事件(未處理異常)。不過,,您可以很容易地在這些基類之上進行構建,以從應用程序重創建並引發您自己的事件。舉例來說,您可能創建一個自定義的事件來記錄何時第一百個用戶單擊某一特定的鏈接。
ASP.Net 2.0 健康監視系統真正強大的功能是,通過 web.config 和 Machine.config 文件它是完全可配置的。使用正常的 XML,您能定義事件、定義提供程序(事件接收器),以及將特定的事件發送到特定的提供程序。
創建事件
事件在結構上與異常是類似的。也就是說,除了作為一個消息容器,event 類本身幾乎沒有功能。在健康監視方面,所有事件都從 Sytstem.Web.Management.WebBaseEvent 繼承。不過,您也可以從用於專用目的(如收集 HTTP 請求數據或處理異常)的高級基類派生。
列表 4. 自定義事件
using System;
using System.Web.Management;
public class CustomEvent : WebBaseEvent
{
public const int EventCode = WebEventCodes.WebExtendeDBase + 10;
public MyEvent(string message, object eventSource)
: base(message, eventSource, EventCode)
{ }
}
創建自定義事件的最重要部分是提供一個唯一的 EventCode。所有內置事件代碼都在 WebEventCodes 枚舉中。自定義事件應該有從 WebEventCodes.WebExtendeDBase + 1 開始的數字。除此之外創建自定義事件中的唯一常見任務是正確地初始化事件。
使用事件
雖然內置事件自動激發,但您還是可以將代碼添加到應用程序以在任何時候啟動自定義事件。
列表 5. 引發一個事件
<script runat="server">
void Page_Load(Object sender, EventArgs e)
{ // Raise a custom event MyEvent myEvent =
new MyEvent("loading webevent sample page", this); myEvent.Raise(); }
</script>
當您從 ASP.Net 頁面引發一個事件時,您只是創建該事件的一個新實例然後執行 Raise() 方法。Raise() 方法將事件實例自動傳遞到健康監視引擎。然後此引擎將該事件映射到配置文件和提供程序,並將該事件移交給正確的提供程序。提供程序最終將事件傳遞到正確的接收器。
配置健康監視
健康監視是在 Machine.Config 或 Web.Config 文件中的新的 區域配置的。您可以配置 部分來設置一個周期性報告應用程序狀態的 Web 檢測信號。您也可以配置應用程序來生成事件,並將該事件通過各種提供程序傳遞。
配置事件
必須在事件映射區域標識每個事件。事件通過唯一名稱和完整類型被標識。事件名稱在規則區域是作為鏈接來使用的。
列表 6. 事件映射區域
<!-- Event mappings define the events that are monitored -->
<eventMappings>
<add name="SampleWebRequests"
type="Samples.ASPNet.SampleWebRequestEvent, SampleWebRequestEvent,
Version=0.0.0.0, Culture=neutral, PublicKeyToken=f0c63b9a560d5e5a"/>
</eventMappings>
ASP.Net 2.0 附帶幾個內置事件,配置為下列名稱:
• 所有事件。所有事件名稱捕獲任何 WebBaseEvent。這個事件類別是對被健康監視系統捕獲的每個事件的一個廣泛的 catch-all。
• 檢測信號。檢測信號事件使用 WebHeartBeatEvent 提供關於 Web 應用程序狀態的定期通知。
• 應用程序生存期事件。應用程序生存期事件包括啟動和停止應用程序,以及重新編譯應用程序的部分或全部。這些事件是基於 WebApplicationLifetimeEvent 的,並且在 lifetime 事件發生時,報告日期、時間和當前的狀態。
• 所有錯誤。所有錯誤類別收集系統檢測到的任何異常或錯誤。這些事件是基於 WebBaseErrorEvent 的。
• 基礎結構錯誤。使用 WebErrorEvent 捕獲與 ASP.Net 運行庫或 IIS 相關的錯誤。這些事件是所有錯誤類別的子類,並且主要與系統管理員而不是應用程序開發者相關。
• 請求處理錯誤。在請求期間發生的任何錯誤或異常都會觸發一個 WebRequestErrorEvent。這個事件記錄了進入的請求以及與處理該請求相關聯的錯誤。請求處理錯誤也是所有錯誤類別的一個子集。
• 所有審核。可使用健康監視系統通過 WebAuditEvent 提供審核嘗試。這個事件自動記錄 Web 應用程序中活動用戶的操作。如果您正在使用模擬,審核事件將幫助您對誰在使用您的應用程序,以及他們是如何在使用保持跟蹤。
• 失敗審核。WebFailureAuditEvent 是一個特殊的審核事件類型,當一個用戶試圖使用無效的用戶名或密碼登錄您的 Web 站點時,它就會被觸發。當一個對於指定資源用戶是無法驗證的時候,此事件也會發生。
• 成功審核。WebSuccessAuditEvent 是失敗事件的對應,只要用戶已驗證或執行一些其他需要審核記錄的操作就會發生。
自定義事件是易於創建的,盡管您必須向您的應用程序添加代碼來引發事件。
配置提供程序
每個提供程序都必須在配置文件中注冊。注冊一個提供程序需要應用程序的唯一名稱和類型。這個類型包含了實際 provider 類的完整強名稱 (strong name)。提供程序的名稱被用作規則區域中的一個鏈接。
列表 7. 提供程序
<healthMonitoring Enabled="true" heartBeatInterval="0">
<!-- Providers link health events to various targets such as WMI or SMTP email -->
<providers>
<add name="WmiEventProvider" type="System.Web.Management.WebWmIEventProvider,
System.Web,Version=1.2.3400.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
ASP.Net 2.0 附帶有 WMI、Windows 事件監視器、SMTP 電子郵件和 SQL Server 數據庫的提供程序。通過擴展正確的基類,可以創建自定義提供程序來連接到其他事件接收器。
將事件映射到提供程序
配置健康監視的最後一步是,用規則將事件連接到提供程序。規則提供了在好的事件名稱、事件類、提供程序和事件配置文件或者類別之間的一個鏈接。您也可以使用規則來定義啟動特定的事件的一個最短時間間隔。
列表 8. 規則
<!-- Rules link events to providers and profiles, and define intervals for event checking -->
<rules>
<add name="Custom Database Events" eventName="CustomDBEvents"
provider="WmIEventProvider" profile="Database" minInterval="00:01:00" />
<add name="Standard Web Requests" eventName="All Events"
provider="SqlEventProvider" profile="Default" minInterval="00:01:00" /> </rules>
</healthMonitoring>
規則執行由不同屬性配置的若干不同任務:
• name。規則名稱是友好名稱,它會在事件被發送到接收器時出現。
• eventName。eventName 映射到一個在 區域中配置的事件。
• provider。提供程序是一個到在 區域中配置的提供程序的鏈接。任何匹配這個規則的事件將通過這個提供程序傳遞給由該提供程序支持的目標。舉例來說,System.Web.Management.SqlWebEventProvider 會自動將事件寫入到 SQL Server 數據庫。
• profile。不同的提供程序將配置文件屬性作為顯示事件的過濾器來使用。舉例來說,電子郵件提供程序可能立即為任何帶有“緊急”配置文件的事件發送一個消息,但是也可能只發送帶有該日“例行”配置文件事件的匯編的日常電子郵件。
• minInterval。一些事件,如檢測信號,必須在最短的時間間隔內激發。您可以使用這個屬性來設置最小事件時間間隔。
通過這個配置區域,您可以設置各種健康相關事件,並將事件映射到各種提供程序。舉例來說,您可能設置一個檢測信號,每 10 分鐘發送一個 WMI 事件。同樣,您可以為任何未捕獲的異常設置一個電子郵件警報。
相關文章:
http://support.microsoft.com/default.ASPx?scid=kb%3Bzh-cn%3B893664
http://blog.csdn.Net/dshpsky/archive/2006/06/18/810893.ASPx