IWebEventCustomEvaluator 介面

定義

評估事件是否要傳送給相關的提供者以進行處理。

public interface class IWebEventCustomEvaluator
public interface IWebEventCustomEvaluator
type IWebEventCustomEvaluator = interface
Public Interface IWebEventCustomEvaluator

範例

下列程式碼範例示範如何在建立自訂事件時衍生自 IWebEventCustomEvaluator 介面。


using System;
using System.Text;
using System.Web;
using System.Web.Management;

namespace SamplesAspNet
{
  // Implements a custom WebBaseEvent class. 
    public class SampleWebBaseEvent :
        System.Web.Management.WebBaseEvent, IWebEventCustomEvaluator
    {
        private string customCreatedMsg, customRaisedMsg;

        // Store firing record info.
        private static string firingRecordInfo;

        // Implements the IWebEventCustomEvaluator.CanFire 
        // method. It is called by the ASP.NET if this custom
        // type is configured in the profile
        // element of the healthMonitoring section.
        public bool CanFire(
            System.Web.Management.WebBaseEvent e, 
            RuleFiringRecord rule)
        {

            bool fireEvent;
            string lastFired = rule.LastFired.ToString();
            string timesRaised = rule.TimesRaised.ToString();

            // Fire every other event raised.
            fireEvent =
                (rule.TimesRaised % 2 == 0) ? true : false;

            if (fireEvent)
            {
                firingRecordInfo =
                    string.Format("Event last fired: {0}",
                    lastFired) +
                    string.Format(". Times raised: {0}",
                    timesRaised);
            }
            else
                firingRecordInfo =
                  string.Format(
                   "Event not fired. Times raised: {0}",
                   timesRaised);

            return fireEvent;
        }

        // Invoked in case of events identified only by 
        // their event code.
        public SampleWebBaseEvent(string msg, 
            object eventSource, int eventCode):
          base(msg, eventSource, eventCode)
        {
            // Perform custom initialization.
            customCreatedMsg =
            string.Format("Event created at: {0}",
            EventTime.ToString());
        }

        // Invoked in case of events identified by their 
        // event code.and related event detailed code.
        public SampleWebBaseEvent(string msg, object eventSource, 
            int eventCode, int eventDetailCode):
          base(msg, eventSource, eventCode, eventDetailCode)
        {
            // Perform custom initialization.
            customCreatedMsg =
             string.Format("Event created at: {0}",
             EventTime.ToString());
        }


        // Raises the SampleWebBaseEvent.
        public override void Raise()
        {
            // Perform custom processing. 
            customRaisedMsg =
              string.Format("Event raised at: {0}",
              EventTime.ToString());

            // Raise the event.
            base.Raise();
        }


        // Raises the SampleWebBaseEvent.
        public void CustomRaise(
            System.Web.Management.WebBaseEvent evnt)
        {
            
            // Raise the event.
            Raise(evnt);
        }


        // Gets the event code.
        public int GetEventCode(bool detail)
        {
            int eCode;

            if (!detail)
                // Get the event code.
                eCode = EventCode;

            else
                // Get the detail event code.
                eCode = EventDetailCode;

            return eCode;
        }

        // Gets the event sequence.
        public long GetEventSequence()
        {
            // Get the event sequence.
            long eventSequence = EventSequence;
            return eventSequence;
        }

        // Gets the event source.
        public Object GetEventSource()
        {
            // Get the event source.
            Object source = this.EventSource;
            return source;
        }

        // Gets the event time.
        public DateTime GetEventTime()
        {
            // Get the event source.
            DateTime eTime = EventTime;
            return eTime;
        }

        // Gets the event time.
        public DateTime GetEventTimeUtc()
        {
            // Get the event source.
            DateTime eTime = EventTimeUtc;
            return eTime;
        }

        // Gets the event sequence.
        public string GetEventMessage()
        {
            // Get the event message.
            string eventMsg = Message;
            return eventMsg;
        }

        // Gets the current application information.
        public WebApplicationInformation GetEventAppInfo()
        {
            // Get the event message.
            WebApplicationInformation appImfo = 
                ApplicationInformation;
            return appImfo;
        }

        // Implements the ToString() method.
        public override string ToString()
        {
            return base.ToString();
        }

        // Implements the ToString(bool, bool) method.
        public string customToString(bool includeAppInfo, 
            bool includeCustomInfo)
        {
            return (
                base.ToString(includeAppInfo, 
                includeCustomInfo));
        }

        // Gets the event identifier.
        public Guid GetEventId()
        {
            Guid evId =  EventID;
            return evId;
        }

        //Formats Web request event information.
        public override void FormatCustomEventDetails(
            WebEventFormatter formatter)
        {
            base.FormatCustomEventDetails(formatter);

            // Add custom data.
            formatter.AppendLine("");

            formatter.IndentationLevel += 1;

            formatter.TabSize = 4;

            formatter.AppendLine(
                 "*SampleWebBaseEvent Start *");

            // Display custom event information.
            formatter.AppendLine(customCreatedMsg);
            formatter.AppendLine(customRaisedMsg);
            formatter.AppendLine(firingRecordInfo);

            formatter.AppendLine(
          "* SampleWebBaseEvent End *");


            formatter.IndentationLevel -= 1;
        }
    }
}
Imports System.Text
Imports System.Web
Imports System.Web.Management


Public Class SampleWebBaseEvent
    Inherits System.Web.Management.WebBaseEvent
    Implements System.Web.Management.IWebEventCustomEvaluator


    Private customCreatedMsg, customRaisedMsg As String

    ' Store firing record info.
    Private Shared firingRecordInfo As String

    ' Implements the IWebEventCustomEvaluator.CanFire 
    ' method. It is called by the ASP.NET if this custom
    ' type is configured in the profile
    ' element of the healthMonitoring section.
    Public Function CanFire( _
    ByVal e As System.Web.Management.WebBaseEvent, _
    ByVal rule As RuleFiringRecord) As Boolean _
    Implements System.Web.Management.IWebEventCustomEvaluator.CanFire

        Dim fireEvent As Boolean
        Dim lastFired As String = _
            rule.LastFired.ToString()
        Dim timesRaised As String = _
            rule.TimesRaised.ToString()

        ' Fire every other event raised.
        fireEvent = _
        IIf(rule.TimesRaised Mod 2 = 0, True, False)

        If fireEvent Then
            firingRecordInfo = String.Format( _
            "Event last fired: {0}", lastFired) + _
            String.Format( _
            ". Times raised: {0}",  timesRaised) 
          
        Else
            firingRecordInfo = String.Format( _
            "Event not fired. Times raised: {0}", _
            timesRaised)
        End If

        Return fireEvent

    End Function 'CanFire

 
    ' Invoked in case of events identified only by 
    ' their event code.
    Public Sub New(ByVal msg As String, _
    ByVal eventSource As Object, _
    ByVal eventCode As Integer)
        MyBase.New(msg, eventSource, eventCode)
        ' Perform custom initialization.
        customCreatedMsg = String.Format( _
        "Event created at: {0}", DateTime.Now.TimeOfDay.ToString())

    End Sub


    ' Invoked in case of events identified by their 
    ' event code.and related event detailed code.
    Public Sub New(ByVal msg As String, _
    ByVal eventSource As Object, _
    ByVal eventCode As Integer, _
    ByVal eventDetailCode As Integer)
        MyBase.New(msg, eventSource, _
        eventCode, eventDetailCode)
        ' Perform custom initialization.
        customCreatedMsg = String.Format( _
        "Event created at: {0}", DateTime.Now.TimeOfDay.ToString())

    End Sub


    ' Raises the SampleWebBaseEvent.
    Public Overrides Sub Raise()
        ' Perform custom processing. 
        customRaisedMsg = String.Format( _
        "Event raised at: {0}", DateTime.Now.TimeOfDay.ToString())

        ' Raise the event.
        MyBase.Raise()

    End Sub

    ' Raises the SampleWebBaseEvent.
    Public Sub CustomRaise(ByVal evnt _
    As System.Web.Management.WebBaseEvent)

        ' Raise the event.
        Raise(evnt)

    End Sub


    ' Gets the event code.
    Public Function GetEventCode(ByVal detail _
    As Boolean) As Integer
        Dim eCode As Integer

        If Not detail Then
            ' Get the event code.
            eCode = EventCode
            ' Get the detail event code.
        Else
            eCode = EventDetailCode
        End If
        Return eCode

    End Function 'GetEventCode


    ' Gets the event sequence.
    Public Function GetEventSequence() As Long
        ' Get the event sequence.
        Dim eventSequence As Long = eventSequence
        Return eventSequence

    End Function 'GetEventSequence



    ' Gets the event source.
    Public Function GetEventSource() As [Object]
        ' Get the event source.
        Dim [source] As [Object] = Me.EventSource
        Return [source]

    End Function 'GetEventSource

    ' Gets the event time.
    Public Function GetEventTime() As DateTime
        ' Get the event source.
        Dim eTime As DateTime = EventTime
        Return eTime

    End Function 'GetEventTime

    ' Gets the event time.
    Public Function GetEventTimeUtc() As DateTime
        ' Get the event source.
        Dim eTime As DateTime = EventTimeUtc
        Return eTime

    End Function 'GetEventTimeUtc

    ' Gets the event sequence.
    Public Function GetEventMessage() As String
        ' Get the event message.
        Dim eventMsg As String = Message
        Return eventMsg

    End Function 'GetEventMessage

    ' Gets the current application information.
    Public Function GetEventAppInfo() As WebApplicationInformation
        ' Get the event message.
        Dim appImfo As WebApplicationInformation = _
        ApplicationInformation
        Return appImfo

    End Function 'GetEventAppInfo

    ' Implements the ToString() method.
    Public Overrides Function ToString() As String
        Return MyBase.ToString()

    End Function 'ToString

    ' Implements the ToString(bool, bool) method.
    Public Function customToString(ByVal includeAppInfo As Boolean, _
    ByVal includeCustomInfo As Boolean) As String
        Return MyBase.ToString(includeAppInfo, includeCustomInfo)

    End Function 'customToString

    ' Gets the event identifier.
    Public Function GetEventId() As Guid
        Dim evId As Guid = EventID
        Return evId

    End Function 'GetEventId

    
    'Formats Web request event information.
    Public Overrides Sub FormatCustomEventDetails( _
ByVal formatter As WebEventFormatter)
        MyBase.FormatCustomEventDetails(formatter)

        ' Add custom data.
        formatter.AppendLine("")

        formatter.IndentationLevel += 1
        
        formatter.TabSize = 4
        
        formatter.AppendLine("*SampleWebBaseEvent Start *")
        formatter.AppendLine("Custom information goes here")
        formatter.AppendLine("* SampleWebBaseEvent End *")
        ' Display custom event timing.
        formatter.AppendLine(customCreatedMsg)
        formatter.AppendLine(customRaisedMsg)
        formatter.IndentationLevel -= 1

    End Sub

End Class

以下是組態檔的摘錄,可讓 ASP.NET 使用 CanFire 方法來決定是否必須將引發的事件傳送給提供者進行處理。

<healthMonitoring   
  heartBeatInterval="0" enabled="true">  

    <providers>  
      <add name="SampleWebEventProvider"   
        type="SamplesAspNet.SampleEventProvider, webeventprovider, Version=1.0.1741.20369, Culture=neutral, PublicKeyToken=cf85aa6c978d9dea, processorArchitecture=MSIL" />  
    </providers>  

    <profiles>  
      <add   
        name="Custom"   
        minInstances="1"   
        maxLimit="Infinite"   
        minInterval="00:00:00"   
        custom ="SamplesAspNet.SampleWebRequestEvent,webrequestevent"   
        />  
    </profiles>  

    <eventMappings>  

      <add name="SampleWebRequestEvent" type="SamplesAspNet.SampleWebRequestEvent,webrequestevent, Version=1.0.1759.20533, Culture=neutral, PublicKeyToken=0d72899b07049076, processorArchitecture=MSIL" />  

    </eventMappings>  

    <rules>  
      <clear />  

        <add name="Custom Web Request Event"   
          eventName="SampleWebRequestEvent"  
          provider="SampleWebEventProvider" profile="Custom" />  
    </rules>  

</healthMonitoring>  

備註

ASP.NET 健康情況監視可讓生產與作業人員管理已部署的 Web 應用程式。 System.Web.Management命名空間包含負責封裝應用程式健康狀態資料的健全狀況事件種類,以及負責處理此資料的提供者類型。 它也包含支援類型,可協助管理健康情況事件。

此介面允許啟用或停用特定事件的引發。 當您實作自己的自訂事件,並想要控制傳送給相關提供者進行處理的速率時,這特別有用。

注意

這個介面不會控制引發事件的頻率。 它只會控制傳送事件資訊給提供者進行處理的頻率。

方法

CanFire(WebBaseEvent, RuleFiringRecord)

評估事件是否應該引發。

適用於

另請參閱