BufferedWebEventProvider 类

定义

提供用于创建需要缓冲的事件提供程序的基本功能。

public ref class BufferedWebEventProvider abstract : System::Web::Management::WebEventProvider
public abstract class BufferedWebEventProvider : System.Web.Management.WebEventProvider
type BufferedWebEventProvider = class
    inherit WebEventProvider
Public MustInherit Class BufferedWebEventProvider
Inherits WebEventProvider
继承
BufferedWebEventProvider
派生

示例

下面的代码示例演示如何从 BufferedWebEventProvider 类派生,以创建一个自定义提供程序,该提供程序将配置的事件写入必须为其授予适当的访问权限的本地文件。


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." );
            }
        }
    }
}
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
    
   
   Public Overrides Sub Flush()
      customInfo.AppendLine("Perform custom flush")
        StoreToFile(customInfo, _
        logFilePath, FileMode.Append)
   End Sub
   
   ' 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
   
   
   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
   

    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

    ' 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

    ' 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
End Class

以下配置文件摘录显示了一个 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>  

注解

ASP.NET 运行状况监视允许生产和运营人员管理已部署的 Web 应用程序。 命名空间 System.Web.Management 包含负责打包应用程序运行状况状态数据的运行状况事件类型和负责处理此数据的提供程序类型。 它还包含有助于管理运行状况事件的支持类型。

如果要自定义运行状况事件处理,可以从 类派生 BufferedWebEventProvider ,以创建自己的自定义缓冲提供程序。

注意

在大多数情况下,你将能够使用 ASP.NET 实现的运行状况监视类型,并通过在配置节中 healthMonitoring 指定值来控制运行状况监视系统。 还可以从运行状况监视类型派生,以创建自己的自定义事件和提供程序。 有关创建自定义提供程序的示例,请参阅 如何:实现运行状况监视自定义提供程序示例

构造函数

BufferedWebEventProvider()

初始化 BufferedWebEventProvider 类的新实例。

属性

BufferMode

获取一个指示提供程序使用的缓冲模式的值。

Description

获取一条简短的易懂描述,它适合在管理工具或其他用户界面 (UI) 中显示。

(继承自 ProviderBase)
Name

获得一个友好名称,用于在配置过程中引用提供程序。

(继承自 ProviderBase)
UseBuffering

获取一个指示提供程序是否处于缓冲模式的值。

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Flush()

将事件从提供程序缓冲区移到事件日志中。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
Initialize(String, NameValueCollection)

设置此对象的初始值。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ProcessEvent(WebBaseEvent)

处理传递给提供程序的事件。

ProcessEventFlush(WebEventBufferFlushInfo)

处理缓冲的事件。

Shutdown()

执行与关闭提供程序相关联的任务。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于

另请参阅