BufferedWebEventProvider クラス
アセンブリ: System.Web (system.web.dll 内)


運用および操作の担当者は、ASP.NET Health Monitoring を使用して、配置されている Web アプリケーションを管理できます。System.Web.Management 名前空間には、アプリケーションの状態データをパッケージ化する状態イベント型、およびそのデータを処理するプロバイダ型が含まれます。また、状態イベント管理を支援するサポート型も含まれます。
状態イベント処理をカスタマイズする場合、BufferedWebEventProvider クラスの派生として独自のバッファされたカスタム プロバイダを作成できます。
![]() |
---|
ほとんどの場合、ASP.NET 状態監視型はそのままの実装で使用できます。ASP.NET Health Monitoring system の制御は healthMonitoring 構成セクションに値を指定することによって行います。状態監視型の派生として独自のイベントおよびプロバイダを作成することもできます。カスタム プロバイダの作成例については、「方法 : 状態監視のカスタム プロバイダの例を実装する」を参照してください。 |

カスタム プロバイダを BufferedWebEventProvider クラスの派生として作成する方法を次のコード例に示します。このカスタム プロバイダは、構成されたイベントをローカル ファイルに書き込みます。該当するローカル ファイルには、適切なアクセス権が与えられている必要があります。
Imports System Imports System.Text Imports System.IO Imports System.Web.Management Imports System.Collections.Generic Imports System.Collections.Specialized Imports System.Web ' Implements a custom event provider. Public Class SampleBufferedWebEventProvider Inherits BufferedWebEventProvider ' The local path of the file where ' to store event information. Private logFilePath As String = String.Empty ' Holds custom information. Private customInfo As StringBuilder Private fs As FileStream Private providerName, buffer, bufferModality As String Public Sub New() ' Perform local initializations. ' Path of local file where to store ' event info. ' Assure that the path works for you and ' that the right permissions are set. logFilePath = "C:/test/log.doc" ' Instantiate buffer to contain ' local data. customInfo = New StringBuilder() End Sub 'New Public Overrides Sub Flush() customInfo.AppendLine("Perform custom flush") StoreToFile(customInfo, _ logFilePath, FileMode.Append) End Sub 'Flush ' Initializes the provider. Public Overrides Sub Initialize(ByVal name As String, _ ByVal config As NameValueCollection) MyBase.Initialize(name, config) ' Get the configuration information. providerName = name buffer = SampleUseBuffering.ToString() bufferModality = SampleBufferMode customInfo.AppendLine(String.Format( _ "Provider name: {0}", providerName)) customInfo.AppendLine(String.Format( _ "Buffering: {0}", buffer)) customInfo.AppendLine(String.Format( _ "Buffering modality: {0}", bufferModality)) End Sub 'Initialize Public ReadOnly Property SampleUseBuffering() As Boolean Get Return UseBuffering End Get End Property Public ReadOnly Property SampleBufferMode() As String Get Return BufferMode End Get End Property ' Processes the incoming events. ' This method performs custom ' processing and, if buffering is ' enabled, it calls the base.ProcessEvent ' to buffer the event information. Public Overrides Sub ProcessEvent( _ ByVal eventRaised As WebBaseEvent) If UseBuffering Then ' Buffering enabled, call the base event to ' buffer event information. MyBase.ProcessEvent(eventRaised) Else ' Buffering disabled, store the current event ' now. customInfo.AppendLine("*** Buffering disabled ***") customInfo.AppendLine(eventRaised.ToString()) ' Store the information in the specified file. StoreToFile(customInfo, _ logFilePath, FileMode.Append) End If End Sub 'ProcessEvent Private Function GetEvents( _ ByVal flushInfo As WebEventBufferFlushInfo) _ As WebBaseEventCollection Return flushInfo.Events End Function 'GetEvents Private Function GetEventsDiscardedSinceLastNotification( _ ByVal flushInfo _ As WebEventBufferFlushInfo) As Integer Return flushInfo.EventsDiscardedSinceLastNotification End Function 'GetEventsDiscardedSinceLastNotification Private Function GetEventsInBuffer(ByVal flushInfo _ As WebEventBufferFlushInfo) As Integer Return flushInfo.EventsInBuffer End Function 'GetEventsInBuffer Private Function GetLastNotificationTime(ByVal flushInfo _ As WebEventBufferFlushInfo) As DateTime Return flushInfo.LastNotificationUtc End Function 'GetLastNotificationTime Private Function GetNotificationSequence(ByVal flushInfo _ As WebEventBufferFlushInfo) As Integer Return flushInfo.NotificationSequence End Function 'GetNotificationSequence Private Function GetNotificationType(ByVal flushInfo _ As WebEventBufferFlushInfo) _ As EventNotificationType Return flushInfo.NotificationType End Function 'GetNotificationType ' Processes the messages that have been buffered. ' It is called by the ASP.NET when the flushing of ' the buffer is required according to the parameters ' defined in the <bufferModes> element of the ' <healthMonitoring> configuration section. Public Overrides Sub ProcessEventFlush(ByVal flushInfo _ As WebEventBufferFlushInfo) ' Customize event information to be sent to ' the Windows Event Viewer Application Log. customInfo.AppendLine( _ "SampleEventLogWebEventProvider buffer flush.") customInfo.AppendLine(String.Format( _ "NotificationType: {0}", _ GetNotificationType(flushInfo))) customInfo.AppendLine(String.Format( _ "EventsInBuffer: {0}", _ GetEventsInBuffer(flushInfo))) customInfo.AppendLine(String.Format( _ "EventsDiscardedSinceLastNotification: {0}", _ GetEventsDiscardedSinceLastNotification( _ flushInfo))) ' Read each buffered event and send it to the ' Application Log. Dim eventRaised As WebBaseEvent For Each eventRaised In flushInfo.Events customInfo.AppendLine(eventRaised.ToString()) Next eventRaised ' Store the information in the specified file. StoreToFile(customInfo, logFilePath, _ FileMode.Append) End Sub 'ProcessEventFlush ' Performs standard shutdown. Public Overrides Sub Shutdown() ' Here you need the code that performs ' those tasks required before shutting ' down the provider. ' Flush the buffer, if needed. Flush() End Sub 'Shutdown ' Store event information in a local file. Private Sub StoreToFile(ByVal [text] _ As StringBuilder, ByVal filePath As String, _ ByVal mode As FileMode) Dim writeBlock As Integer Dim startIndex As Integer Try writeBlock = 256 startIndex = 0 ' Open or create the local file ' to store the event information. fs = New FileStream(filePath, mode, FileAccess.Write) ' Lock the file for writing. fs.Lock(startIndex, writeBlock) ' Create a stream writer Dim writer As New StreamWriter(fs) ' Set the file pointer to the current ' position to keep adding data to it. ' If you want to rewrite the file use ' the following statement instead. ' writer.BaseStream.Seek (0, SeekOrigin.Begin); writer.BaseStream.Seek(0, SeekOrigin.Current) 'If the file already exists it must not ' be write protected otherwise ' the following write operation 'fails silently. writer.Write([text].ToString()) ' Update the underlying file writer.Flush() ' Unlock the file for other processes. fs.Unlock(startIndex, writeBlock) ' Close the stream writer and 'the underlying file writer.Close() fs.Close() Catch e As Exception 'Use this for debugging. 'Never dispaly it! Dim ex As String = e.ToString() Throw New Exception( _ "[SampleEventProvider] StoreToFile: exception.") End Try End Sub 'StoreToFile End Class 'SampleBufferedWebEventProvider
using System; using System.Text; using System.IO; using System.Web.Management; using System.Collections.Generic; using System.Collections.Specialized; using System.Web; namespace Samples.AspNet.Management { // Implements a custom event provider. public class SampleBufferedWebEventProvider : BufferedWebEventProvider { // The local path of the file where // to store event information. private string logFilePath = string.Empty; // Holds custom information. private StringBuilder customInfo; private FileStream fs; private string providerName, buffer, bufferModality; public SampleBufferedWebEventProvider() { // Perform local initializations. // Path of local file where to store // event info. // Assure that the path works for you and // that the right permissions are set. logFilePath = "C:/test/log.doc"; // Instantiate buffer to contain // local data. customInfo = new StringBuilder(); } public override void Flush() { customInfo.AppendLine("Perform custom flush"); StoreToFile(customInfo, logFilePath, FileMode.Append); } // Initializes the provider. public override void Initialize(string name, NameValueCollection config) { base.Initialize(name, config); // Get the configuration information. providerName = name; buffer = SampleUseBuffering.ToString(); bufferModality = SampleBufferMode; customInfo.AppendLine(string.Format( "Provider name: {0}", providerName)); customInfo.AppendLine(string.Format( "Buffering: {0}", buffer)); customInfo.AppendLine(string.Format( "Buffering modality: {0}", bufferModality)); } public bool SampleUseBuffering { get { return UseBuffering; } } public string SampleBufferMode { get { return BufferMode; } } // Processes the incoming events. // This method performs custom processing and, // if buffering is enabled, it calls the // base.ProcessEvent to buffer the event // information. public override void ProcessEvent( WebBaseEvent eventRaised) { if (UseBuffering) // Buffering enabled, call the // base event to buffer event information. base.ProcessEvent(eventRaised); else { // Buffering disabled, store the // current event now. customInfo.AppendLine( "*** Buffering disabled ***"); customInfo.AppendLine( eventRaised.ToString()); // Store the information in the specified file. StoreToFile(customInfo, logFilePath, FileMode.Append); } } private WebBaseEventCollection GetEvents( WebEventBufferFlushInfo flushInfo) { return flushInfo.Events; } private int GetEventsDiscardedSinceLastNotification( WebEventBufferFlushInfo flushInfo) { return flushInfo.EventsDiscardedSinceLastNotification; } private int GetEventsInBuffer( WebEventBufferFlushInfo flushInfo) { return flushInfo.EventsInBuffer; } private DateTime GetLastNotificationTime( WebEventBufferFlushInfo flushInfo) { return flushInfo.LastNotificationUtc; } private int GetNotificationSequence( WebEventBufferFlushInfo flushInfo) { return flushInfo.NotificationSequence; } private EventNotificationType GetNotificationType( WebEventBufferFlushInfo flushInfo) { return flushInfo.NotificationType; } // Processes the messages that have been buffered. // It is called by the ASP.NET when the flushing of // the buffer is required. public override void ProcessEventFlush( WebEventBufferFlushInfo flushInfo) { // Customize event information to be sent to // the Windows Event Viewer Application Log. customInfo.AppendLine( "SampleEventLogWebEventProvider buffer flush."); customInfo.AppendLine( string.Format("NotificationType: {0}" , GetNotificationType(flushInfo))); customInfo.AppendLine( string.Format("EventsInBuffer: {0}" , GetEventsInBuffer(flushInfo))); customInfo.AppendLine( string.Format( "EventsDiscardedSinceLastNotification: {0}", GetEventsDiscardedSinceLastNotification(flushInfo))); // Read each buffered event and send it to the // Application Log. foreach (WebBaseEvent eventRaised in flushInfo.Events) customInfo.AppendLine(eventRaised.ToString()); // Store the information in the specified file. StoreToFile(customInfo, logFilePath, FileMode.Append); } // Performs standard shutdown. public override void Shutdown() { // Here you need the code that performs // those tasks required before shutting // down the provider. // Flush the buffer, if needed. Flush(); } // Store event information in a local file. private void StoreToFile(StringBuilder text, string filePath, FileMode mode) { int writeBlock; int startIndex; try { writeBlock = 256; startIndex = 0; // Open or create the local file // to store the event information. fs = new FileStream(filePath, mode, FileAccess.Write); // Lock the file for writing. fs.Lock(startIndex, writeBlock); // Create a stream writer StreamWriter writer = new StreamWriter(fs); // Set the file pointer to the current // position to keep adding data to it. // If you want to rewrite the file use // the following statement instead. // writer.BaseStream.Seek (0, SeekOrigin.Begin); writer.BaseStream.Seek(0, SeekOrigin.Current); //If the file already exists it must not // be write protected otherwise // the following write operation fails silently. writer.Write(text.ToString()); // Update the underlying file writer.Flush(); // Unlock the file for other processes. fs.Unlock(startIndex, writeBlock); // Close the stream writer and the underlying file writer.Close(); fs.Close(); } catch (Exception e) { // Use this for debugging. // Never dispaly it! string ex = e.ToString(); throw new Exception( "[SampleEventProvider] StoreToFile: exception." ); } } } }
次の構成ファイルの抜粋に、healthMonitoring 構成セクションを示します。これにより、ASP.NET は上記で定義されるカスタム プロバイダを使用してすべての状態監視イベントを処理できます。
<healthMonitoring heartBeatInterval="0" enabled="true"> <bufferModes> <add name ="Custom Notification" maxBufferSize="10" maxFlushSize="5" urgentFlushThreshold="10" regularFlushInterval="Infinite" urgentFlushInterval="00:00:30" maxBufferThreads="1" /> </bufferModes> <providers> <clear/> <add name="SampleBufferedWebEventProvider" type="SamplesAspNet.SampleBufferedWebEventProvider, bufferedwebeventprovider, Version=1.0.1785.14700, Culture=neutral, PublicKeyToken=d31491bf33b55954, processorArchitecture=MSIL" buffer="true" bufferMode="Custom Notification" /> </providers> <profiles> <add name="Custom" minInstances="1" maxLimit="Infinite" minInterval="00:00:00" /> </profiles> <rules> <clear /> <add name="Custom Buffered Web Event Provider" eventName="All Events" provider="SampleBufferedWebEventProvider" profile="Custom" /> </rules> </healthMonitoring>

System.Configuration.Provider.ProviderBase
System.Web.Management.WebEventProvider
System.Web.Management.BufferedWebEventProvider
System.Web.Management.MailWebEventProvider
System.Web.Management.SqlWebEventProvider


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


BufferedWebEventProvider コンストラクタ
アセンブリ: System.Web (system.web.dll 内)


このコンストラクタは、ASP.NET Health Monitoring system によって内部的に使用されます。TraceWebEventProvider オブジェクトのインスタンス化には使用しませんが、このクラスを継承する独自のプロバイダ型を実装する場合には呼び出すことができます。

このコンストラクタをカスタム イベント プロバイダで使用する方法を次のコード例に示します。
Public Sub New() ' Perform local initializations. ' Path of local file where to store ' event info. ' Assure that the path works for you and ' that the right permissions are set. logFilePath = "C:/test/log.doc" ' Instantiate buffer to contain ' local data. customInfo = New StringBuilder() End Sub 'New
public SampleBufferedWebEventProvider() { // Perform local initializations. // Path of local file where to store // event info. // Assure that the path works for you and // that the right permissions are set. logFilePath = "C:/test/log.doc"; // Instantiate buffer to contain // local data. customInfo = new StringBuilder(); }

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


BufferedWebEventProvider プロパティ

名前 | 説明 | |
---|---|---|
![]() | BufferMode | プロバイダが使用するバッファリング モードを示す値を取得します。 |
![]() | Description | 管理ツールまたは他のユーザー インターフェイス (UI) での表示に適した、簡単でわかりやすい説明を取得します。 ( ProviderBase から継承されます。) |
![]() | Name | 構成時にプロバイダを参照するために使用される表示名を取得します。 ( ProviderBase から継承されます。) |
![]() | UseBuffering | プロバイダがバッファ モードかどうかを示す値を取得します。 |

BufferedWebEventProvider メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | Flush | オーバーライドされます。 イベントをプロバイダのバッファからイベント ログに移動します。 |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | Initialize | オーバーライドされます。 このオブジェクトの初期値を設定します。 |
![]() | ProcessEvent | オーバーライドされます。 プロバイダに渡されたイベントを処理します。 |
![]() | ProcessEventFlush | バッファされたイベントを処理します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | Shutdown | オーバーライドされます。 プロバイダのシャットダウンに関連するタスクを実行します。 |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

BufferedWebEventProvider メンバ
バッファリングを必要とするイベント プロバイダを作成するための基本機能を提供します。
BufferedWebEventProvider データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | BufferMode | プロバイダが使用するバッファリング モードを示す値を取得します。 |
![]() | Description | 管理ツールまたは他のユーザー インターフェイス (UI) での表示に適した、簡単でわかりやすい説明を取得します。(ProviderBase から継承されます。) |
![]() | Name | 構成時にプロバイダを参照するために使用される表示名を取得します。(ProviderBase から継承されます。) |
![]() | UseBuffering | プロバイダがバッファ モードかどうかを示す値を取得します。 |

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | Flush | オーバーライドされます。 イベントをプロバイダのバッファからイベント ログに移動します。 |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | Initialize | オーバーライドされます。 このオブジェクトの初期値を設定します。 |
![]() | ProcessEvent | オーバーライドされます。 プロバイダに渡されたイベントを処理します。 |
![]() | ProcessEventFlush | バッファされたイベントを処理します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | Shutdown | オーバーライドされます。 プロバイダのシャットダウンに関連するタスクを実行します。 |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

- BufferedWebEventProviderのページへのリンク