Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

BufferedWebEventProvider Class

Provides the base functionality for creating event providers that require buffering.

Namespace:  System.Web.Management
Assembly:  System.Web (in System.Web.dll)

'Declaration
Public MustInherit Class BufferedWebEventProvider _
	Inherits WebEventProvider

The BufferedWebEventProvider type exposes the following members.

  NameDescription
Protected methodBufferedWebEventProviderInitializes a new instance of the BufferedWebEventProvider class.
Top

  NameDescription
Public propertyBufferModeGets a value indicating the buffering mode used by the provider.
Public propertyDescriptionGets a brief, friendly description suitable for display in administrative tools or other user interfaces (UIs). (Inherited from ProviderBase.)
Public propertyNameGets the friendly name used to refer to the provider during configuration. (Inherited from ProviderBase.)
Public propertyUseBufferingGets a value indicating whether the provider is in buffered mode.
Top

  NameDescription
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodFlushMoves the events from the provider's buffer into the event log. (Overrides WebEventProvider.Flush.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodInitializeSets the initial values for this object. (Overrides ProviderBase.Initialize(String, NameValueCollection).)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodProcessEventProcesses the event passed to the provider. (Overrides WebEventProvider.ProcessEvent(WebBaseEvent).)
Public methodProcessEventFlushProcesses the buffered events.
Public methodShutdownPerforms tasks associated with shutting down the provider. (Overrides WebEventProvider.Shutdown.)
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

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.

NoteNote

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.

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>

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show:
© 2015 Microsoft