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)

public abstract class BufferedWebEventProvider : 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.


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." );
            }
        }

    }

}

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

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

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:
© 2014 Microsoft