asp.net 2.0 還提供了全功能的應(yīng)用程序監(jiān)視和健康監(jiān)視。這個系統(tǒng)是由一個完全可擴展事件模型和一個能將事件發(fā)送到多種接收器的事件引擎組成的。舉例來說,您可以配置您的 ASP.NET 應(yīng)用程序來每天發(fā)送電子郵件,表明服務(wù)器正在運行并且包括可用內(nèi)存的數(shù)量。同樣,您可以創(chuàng)建一個鏈接到未處理異常的健康事件。異常內(nèi)容、請求標題以及時間和日期都可以被發(fā)送到一個錯誤日志記錄數(shù)據(jù)庫。
ASP.NET 2.0 包含了內(nèi)置的事件,包括心跳、應(yīng)用程序生存期事件(啟動/停止/編譯)和錯誤陷阱事件(未處理異常)。不過,,您可以很容易地在這些基類之上進行構(gòu)建,以從應(yīng)用程序重創(chuàng)建并引發(fā)您自己的事件。舉例來說,您可能創(chuàng)建一個自定義的事件來記錄何時第一百個用戶單擊某一特定的鏈接。
ASP.NET 2.0 健康監(jiān)視系統(tǒng)真正強大的功能是,通過 web.config 和 machine.config 文件它是完全可配置的。使用正常的 xml,您能定義事件、定義提供程序(事件接收器),以及將特定的事件發(fā)送到特定的提供程序。
創(chuàng)建事件
事件在結(jié)構(gòu)上與異常是類似的。也就是說,除了作為一個消息容器,event 類本身幾乎沒有功能。在健康監(jiān)視方面,所有事件都從 Sytstem.Web.Management.WebBaseEvent 繼承。不過,您也可以從用于專用目的(如收集 HTTP 請求數(shù)據(jù)或處理異常)的高級基類派生。
列表 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)
{ }
}
創(chuàng)建自定義事件的最重要部分是提供一個唯一的 EventCode。所有內(nèi)置事件代碼都在 WebEventCodes 枚舉中。自定義事件應(yīng)該有從 WebEventCodes.WebExtendedBase + 1 開始的數(shù)字。除此之外創(chuàng)建自定義事件中的唯一常見任務(wù)是正確地初始化事件。
使用事件
雖然內(nèi)置事件自動激發(fā),但您還是可以將代碼添加到應(yīng)用程序以在任何時候啟動自定義事件。
列表 5. 引發(fā)一個事件
<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 頁面引發(fā)一個事件時,您只是創(chuàng)建該事件的一個新實例然后執(zhí)行 Raise() 方法。Raise() 方法將事件實例自動傳遞到健康監(jiān)視引擎。然后此引擎將該事件映射到配置文件和提供程序,并將該事件移交給正確的提供程序。提供程序最終將事件傳遞到正確的接收器。
配置健康監(jiān)視
健康監(jiān)視是在 machine.Config 或 Web.Config 文件中的新的 區(qū)域配置的。您可以配置 部分來設(shè)置一個周期性報告應(yīng)用程序狀態(tài)的 Web 檢測信號。您也可以配置應(yīng)用程序來生成事件,并將該事件通過各種提供程序傳遞。
配置事件
必須在事件映射區(qū)域標識每個事件。事件通過唯一名稱和完整類型被標識。事件名稱在規(guī)則區(qū)域是作為鏈接來使用的。
列表 6. 事件映射區(qū)域
<!-- 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 附帶幾個內(nèi)置事件,配置為下列名稱:
• 所有事件。所有事件名稱捕獲任何 WebBaseEvent。這個事件類別是對被健康監(jiān)視系統(tǒng)捕獲的每個事件的一個廣泛的 catch-all。
• 檢測信號。檢測信號事件使用 WebHeartBeatEvent 提供關(guān)于 Web 應(yīng)用程序狀態(tài)的定期通知。
• 應(yīng)用程序生存期事件。應(yīng)用程序生存期事件包括啟動和停止應(yīng)用程序,以及重新編譯應(yīng)用程序的部分或全部。這些事件是基于 WebapplicationLifetimeEvent 的,并且在 lifetime 事件發(fā)生時,報告日期、時間和當前的狀態(tài)。
• 所有錯誤。所有錯誤類別收集系統(tǒng)檢測到的任何異常或錯誤。這些事件是基于 WebBaseErrorEvent 的。
• 基礎(chǔ)結(jié)構(gòu)錯誤。使用 WebErrorEvent 捕獲與 ASP.NET 運行庫或 IIS 相關(guān)的錯誤。這些事件是所有錯誤類別的子類,并且主要與系統(tǒng)管理員而不是應(yīng)用程序開發(fā)者相關(guān)。
• 請求處理錯誤。在請求期間發(fā)生的任何錯誤或異常都會觸發(fā)一個 WebRequestErrorEvent。這個事件記錄了進入的請求以及與處理該請求相關(guān)聯(lián)的錯誤。請求處理錯誤也是所有錯誤類別的一個子集。
• 所有審核。可使用健康監(jiān)視系統(tǒng)通過 WebAuditEvent 提供審核嘗試。這個事件自動記錄 Web 應(yīng)用程序中活動用戶的操作。如果您正在使用模擬,審核事件將幫助您對誰在使用您的應(yīng)用程序,以及他們是如何在使用保持跟蹤。
• 失敗審核。WebFailureAuditEvent 是一個特殊的審核事件類型,當一個用戶試圖使用無效的用戶名或密碼登錄您的 Web 站點時,它就會被觸發(fā)。當一個對于指定資源用戶是無法驗證的時候,此事件也會發(fā)生。
• 成功審核。WebSuccessAuditEvent 是失敗事件的對應(yīng),只要用戶已驗證或執(zhí)行一些其他需要審核記錄的操作就會發(fā)生。
自定義事件是易于創(chuàng)建的,盡管您必須向您的應(yīng)用程序添加代碼來引發(fā)事件。
配置提供程序
每個提供程序都必須在配置文件中注冊。注冊一個提供程序需要應(yīng)用程序的唯一名稱和類型。這個類型包含了實際 PRovider 類的完整強名稱 (strong name)。提供程序的名稱被用作規(guī)則區(qū)域中的一個鏈接。
列表 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 事件監(jiān)視器、SMTP 電子郵件和 SQL Server 數(shù)據(jù)庫的提供程序。通過擴展正確的基類,可以創(chuàng)建自定義提供程序來連接到其他事件接收器。
將事件映射到提供程序
配置健康監(jiān)視的最后一步是,用規(guī)則將事件連接到提供程序。規(guī)則提供了在好的事件名稱、事件類、提供程序和事件配置文件或者類別之間的一個鏈接。您也可以使用規(guī)則來定義啟動特定的事件的一個最短時間間隔。
列表 8. 規(guī)則
<!-- 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>
規(guī)則執(zhí)行由不同屬性配置的若干不同任務(wù):
• name。規(guī)則名稱是友好名稱,它會在事件被發(fā)送到接收器時出現(xiàn)。
• eventName。eventName 映射到一個在 區(qū)域中配置的事件。
• provider。提供程序是一個到在 區(qū)域中配置的提供程序的鏈接。任何匹配這個規(guī)則的事件將通過這個提供程序傳遞給由該提供程序支持的目標。舉例來說,System.Web.Management.SqlWebEventProvider 會自動將事件寫入到 SQL Server 數(shù)據(jù)庫。
• profile。不同的提供程序?qū)⑴渲梦募傩宰鳛轱@示事件的過濾器來使用。舉例來說,電子郵件提供程序可能立即為任何帶有“緊急”配置文件的事件發(fā)送一個消息,但是也可能只發(fā)送帶有該日“例行”配置文件事件的匯編的日常電子郵件。
• minInterval。一些事件,如檢測信號,必須在最短的時間間隔內(nèi)激發(fā)。您可以使用這個屬性來設(shè)置最小事件時間間隔。
通過這個配置區(qū)域,您可以設(shè)置各種健康相關(guān)事件,并將事件映射到各種提供程序。舉例來說,您可能設(shè)置一個檢測信號,每 10 分鐘發(fā)送一個 WMI 事件。同樣,您可以為任何未捕獲的異常設(shè)置一個電子郵件警報。
相關(guān)文章:
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B893664
http://blog.csdn.net/dshpsky/archive/2006/06/18/810893.aspx
新聞熱點
疑難解答