BufferedWebEventProvider Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje základní funkce pro vytváření zprostředkovatelů událostí, kteří vyžadují ukládání do vyrovnávací paměti.
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
- Dědičnost
- Odvozené
Příklady
Následující příklad kódu ukazuje, jak odvodit z BufferedWebEventProvider třídy k vytvoření vlastního zprostředkovatele, který zapisuje nakonfigurované události do místního souboru, pro který musí být udělena příslušná přístupová práva.
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
Následující výňatek konfiguračního healthMonitoring
souboru ukazuje konfigurační oddíl, který ASP.NET umožňuje použít vlastního zprostředkovatele definovaného výše ke zpracování všech událostí monitorování stavu.
<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>
Poznámky
ASP.NET monitorování stavu umožňuje provozním a provozním pracovníkům spravovat nasazené webové aplikace. Obor System.Web.Management názvů obsahuje typy událostí stavu zodpovědné za balení dat stavu aplikace a typy zprostředkovatelů zodpovědné za zpracování těchto dat. Obsahuje také podpůrné typy, které pomáhají při správě událostí stavu.
Pokud chcete přizpůsobit zpracování událostí stavu, můžete odvození z BufferedWebEventProvider třídy vytvořit vlastního zprostředkovatele ve vyrovnávací paměti.
Poznámka
Ve většině případů budete moct použít ASP.NET typy monitorování stavu tak, jak jsou implementovány, a systém monitorování stavu budete řídit zadáním hodnot v healthMonitoring
části konfigurace. Můžete také odvodit z typů monitorování stavu a vytvořit vlastní události a zprostředkovatele. Příklad vytvoření vlastního zprostředkovatele najdete v tématu Postupy: Implementace vlastního zprostředkovatele monitorování stavu – příklad.
Konstruktory
BufferedWebEventProvider() |
Inicializuje novou instanci BufferedWebEventProvider třídy . |
Vlastnosti
BufferMode |
Získá hodnotu označující režim vyrovnávací paměti používaný zprostředkovatelem. |
Description |
Získá stručný popis vhodný pro zobrazení v nástrojích pro správu nebo jiných uživatelských rozhraní (UI). (Zděděno od ProviderBase) |
Name |
Získá popisný název použitý k odkaz na zprostředkovatele během konfigurace. (Zděděno od ProviderBase) |
UseBuffering |
Získá hodnotu označující, zda je zprostředkovatel v režimu vyrovnávací paměti. |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
Flush() |
Přesune události z vyrovnávací paměti zprostředkovatele do protokolu událostí. |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
Initialize(String, NameValueCollection) |
Nastaví počáteční hodnoty pro tento objekt. |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ProcessEvent(WebBaseEvent) |
Zpracuje událost předanou zprostředkovateli. |
ProcessEventFlush(WebEventBufferFlushInfo) |
Zpracovává události ve vyrovnávací paměti. |
Shutdown() |
Provádí úlohy související s vypnutím poskytovatele. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |