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