다음을 통해 공유


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 상태 모니터링 프로덕션와 운영 스태프를 배포 된 웹 애플리케이션을 관리할 수 있습니다. 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)

적용 대상

추가 정보