ASP.NET 2.0 では、healthMonitoring 属性を使用してイベントを監視できます。 healthMonitoring 属性は、独自のプロバイダーを構築できるメソッドベースのプロバイダーです。 healthMonitoring 属性を使用すると、イベント ログ、SQL Server などのさまざまなデータ ソースのエラー、成功したイベントなどを記録したり、WebEventProvider クラスを継承して独自のプロバイダーを作成したりできます。この記事では、SqlServer エラーを検出し、誰かの電子メール アドレスに電子メールを送信する Web アプリケーションの構成について説明します。まず、web.config 内の healthMonitoring プログラム フラグメントを確認します。ここで、使用するイベントを作成できます。
<healthMonitoring Enabled="true|false" heartBeatInterval="時間間隔">
<バッファモード>...</バッファモード>
<プロバイダー>...</プロバイダー>
<eventMappings>... </eventMappings>
<プロファイル>...</プロファイル>
<ルール>...</ルール>
<healthMonitoring>
要素を確認すると、属性を有効または無効に設定できるかどうかを判断でき、WebHeaderBeatEvent が起動される時間間隔も指定できます。 healthMonitoring には 5 人の子供がいます。
bufferModes: プロバイダーのバッファー サイズを定義できます。
プロバイダー。ここでは、イベントを処理するプロバイダーについて説明します。
EventMappings では、フレンドリーなイベント タイプに関連するイベント名を描画できます。
プロファイルでは、イベントの構成に使用できるパラメーター セットのコレクションを定義します。
ルールに従って、ここにプロバイダーのイベント グラフを描画します。
これらの要素の詳細については、VS 2550 のドキュメントを参照してください。
続行する前に、ASP.NET のプロバイダーの一部のリストを次に示します。
System.Web.Management.MailWebEventProvider
System.Web.Management.SimpleMailWebEventProvider
System.Web.Management.TempulatedMailWebEventProvider
System.Web.Management.TraceWebEventProvider
System.Web.Management.EventLogWebEventProvider
System.Web.Management.SqlWebEventProvider
System.Web.Management.WmiWebEventProvider で
これらを説明する必要はありません。名前を見れば、その機能がわかります。また、SqlWebEventProvider は SQL サーバーに依存して動作し、イベントを aspnet_Web_Event テーブルに保存することにも言及します。このデータベースをインストールするには、フレームワーク フォルダーにある aspnet_regsql.exe ウィザードを実行する必要があります。
ここで、SQL サーバー プロバイダーのログイン エラーが発生し、電子メールの送信時にエラーが生成されるようにプログラムを構成します。
以下は、SqlWebEventProvider と SimpleMailWebEventProvider を使用してエラー イベントを保存する例です。
<healthMonitoring Enabled="true" heartBeatInterval="0">
<バッファモード>
<add name="重要な通知" maxBufferSize="100" maxFlushSize="20"urgentFlushThreshold="1" RegularFlushInterval="Infinite"urgentFlushInterval="00:01:00" maxBufferThreads="1"/> <
add name="分析" maxBufferSize="1000" maxFlushSize="100" 緊急フラッシュしきい値="100"
RegularFlushInterval="00:05:00"緊急FlushInterval="00:01:00" maxBufferThreads="1"/>
</bufferModes>
<プロバイダー>
<add name="CriticalMailEventProvider" type="System.Web.Management.SimpleMailWebEventProvider, System.Web ..." [email protected] [email protected] priority="High" bodyHeader="警告!"
bodyFooter="早急に調査してください。" subjectPrefix="アクションが必要です。"buffer="true"bufferMode="重要な通知" maxEventLength="4096" maxSize="4096" maxMessagesPerNotification="1"/>
<add name="SqlWebEventProvider" type="System.Web.Management.SqlWebEventProvider, System.Web ..."
connectionStringName="LocalSqlServer" maxEventDetailsLength="1073741823"buffer="true"
bufferMode="分析"/>
</providers>
<eventMappings>
<add name="すべてのエラー" type="System.Web.Management.WebBaseErrorEvent, System.Web ..."/>
<add name="リクエスト処理エラー" type="System.Web.Management.WebRequestErrorEvent, System.Web .../>
</eventMappings>
<profiles>
<add name="Default" minInstances="1" maxLimit=" Infinite" minInterval="00:10:00"/>
</profiles>
<rules>
<add name="すべてのエラーのデフォルト"eventName="すべてのエラー" Provider="SqlWebEventProvider" profile="デフォルト"
minInterval="00:00:30"/>
<add name="リクエスト処理エラー" eventsName="リクエスト処理エラー" Provider="CriticalMailEventProvider" profile="Default"/>
</rules>
</healthMonitoring>
この例ではでは、SQL プロバイダを使用してすべてのエラー イベントを記録し、Web リクエスト エラー イベントが発生したときにメール プロバイダを使用してメッセージを送信します。
ASP .NET 2.0 でリリースされたいくつかのイベントを次に示します。
System.Web.Management.WebBaseEvent
System.Web.Management.WebHeartBeatEvent
System.Web.Management.WebApplicationLifetimeEvent
System.Web.Management.WebRequestEvent
System.Web.Management.WebBaseErrorEvent
System.Web.Management.WebErrorEvent
System.Web.Management.WebRequestErrorEvent
System.Web.Management.WebAuditEvent
System.Web.Management.WebFailureAuditEvent
System.Web.Management.WebSuccessAuditEvent
System.Web.Management.WebManagementEvent
System.Web.Management.WebViewStateFailureAuditEvent
System.Web.Management.WebAuthenticationFailureAuditEvent
System.Web.Management.WebAuthenticationSuccessAuditEvent は
、これらのイベントを使用してプロバイダーのプロファイリングを行うことができます。 WebBaseEvent クラスから継承した独自のイベントを作成することもできます。
イベントを自動的に起動するには、WebBaseEvent クラスの wakeup メソッドを使用できます
。
{
//....
catch
(例外e)
{
if (HealthMonitoringManager.Enabled)
{
WebBaseEvent.Raise(new WebErrorEvent("エラー メッセージ", null, 5000, e));
}
}
または:
if (HealthMonitoringManager.Enabled)
{
WebErrorEvent イベント = new WebErrorEvent("エラー メッセージ", null, 5000, e);
イベント.Raise();
}