BufferedWebEventProvider 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供用于创建需要缓冲的事件提供程序的基本功能。
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 类派生,以创建一个自定义提供程序,该提供程序将配置的事件写入必须为其授予适当的访问权限的本地文件。
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) |