BufferedWebEventProvider Class
Provides the base functionality for creating event providers that require buffering.
Assembly: System.Web (in System.Web.dll)
'Declaration <AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level := AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level := AspNetHostingPermissionLevel.Minimal)> _ Public MustInherit Class BufferedWebEventProvider _ Inherits WebEventProvider 'Usage Dim instance As BufferedWebEventProvider
ASP.NET health monitoring allows production and operations staff to manage deployed Web applications. The System.Web.Management namespace contains the health-event types responsible for packaging application health-status data and the provider types responsible for processing this data. It also contains supporting types that help during the management of health events.
If you want to customize the health-event processing, you can derive from the BufferedWebEventProvider class to create your own custom buffered provider.
Note: |
|---|
In most cases you will be able to use the ASP.NET health-monitoring types as implemented, and you will control the health-monitoring system by specifying values in the healthMonitoring configuration section. You can also derive from the health-monitoring types to create your own custom events and providers. For an example of creating a custom provider, see How to: Implement the Health Monitoring Custom Provider Example. |
| Topic | Location |
|---|---|
| How to: Implement the Health Monitoring Custom Provider Example | Building ASP .NET Web Applications |
| How to: Implement the Health Monitoring Custom Provider Example | Building ASP .NET Web Applications |
The following code example shows how to derive from the BufferedWebEventProvider class to create a custom provider that writes the configured events to a local file for which appropriate access rights must be granted.
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
The following configuration file excerpt shows a healthMonitoring configuration section that enables ASP.NET to use the custom provider defined above to process all health-monitoring events.
<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>
- AspNetHostingPermission
for operating in a hosted environment. Demand value: LinkDemand; Permission value: Minimal.
- AspNetHostingPermission
for operating in a hosted environment. Demand value: InheritanceDemand; Permission value: Minimal.
System.Configuration.Provider.ProviderBase
System.Web.Management.WebEventProvider
System.Web.Management.BufferedWebEventProvider
System.Web.Management.MailWebEventProvider
System.Web.Management.SqlWebEventProvider
Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Note: