ASP.NET 2.0에서는 healthMonitoring 특성을 사용하여 이벤트를 모니터링할 수 있습니다. healthMonitoring 속성은 자체 공급자를 구성할 수 있는 메서드 기반 공급자입니다. healthMonitoring 특성을 사용하면 이벤트 로그, SQL Server와 같은 다양한 데이터 소스에 대한 오류, 성공적인 이벤트 등을 기록할 수 있으며 WebEventProvider 클래스를 상속하여 자체 공급자를 만들 수도 있습니다. 이 기사에서는 SqlServer 오류를 감지하고 다른 사람의 이메일 주소로 이메일을 보내는 웹 애플리케이션을 구성하는 과정을 안내하겠습니다. 먼저, 사용할 이벤트를 생성할 수 있는 web.config의 healthMonitoring 프로그램 부분을 살펴보세요.
<healthMonitoring Enabled="true|false" heartBeatInterval="시간 간격">
<bufferModes>... </bufferModes>
<공급자>... </공급자>
<eventMappings>... </eventMappings>
<프로필>... </프로필>
<규칙>...</규칙>
</healthMonitoring>
<healthMonitoring> 요소를 보면 해당 속성을 유효한지 또는 무효로 설정할 수 있는지 확인할 수 있으며, WebHeaderBeatEvent가 깨어나는 시간 간격도 지정할 수 있습니다. healthMonitoring에는 5명의 자녀가 있습니다.
bufferModes: 공급자의 버퍼 크기를 정의할 수 있습니다.
공급자, 여기에서는 이벤트를 처리하는 공급자를 설명합니다.
eventMappings, 여기에서 친숙한 이벤트 유형과 관련된 이벤트 이름을 그릴 수 있습니다.
이벤트를 구성하는 데 사용할 수 있는 매개변수 세트 컬렉션을 정의하는 프로필입니다.
규칙에 따라 여기에 Providers의 이벤트 그래프를 그립니다.
VS 2550 문서에서 이러한 요소에 대한 자세한 내용을 읽을 수 있습니다.
계속하기 전에 ASP.NET의 일부 공급자 목록은 다음과 같습니다.
System.Web.Management.MailWebEventProvider
System.Web.Management.SimpleMailWebEventProvider
System.Web.Management.TemplateMailWebEventProvider
System.Web.Management.TraceWebEventProvider
System.Web.Management.EventLogWebEventProvider
System.Web.Management.SqlWebEventProvider
System.Web.Management.WmiWebEventProvider는
이를 설명할 필요가 없으며 이름을 통해 해당 기능이 무엇인지 알 수 있습니다. 또한 SqlWebEventProvider는 aspnet_Web_Event 테이블에 이벤트를 저장하는 SQL 서버에 의존하여 작동한다는 점을 언급하세요. 이 데이터베이스를 설치하려면 프레임워크 폴더에 있는 aspnet_regsql.exe 마법사를 실행해야 합니다.
이제 SQL 서버 공급자에 대한 로그인 오류가 발생하도록 프로그램을 구성하고 이메일을 보낼 때 오류를 생성합니다.
다음은 SqlWebEventProvider와 SimpleMailWebEventProvider를 사용하여 오류 이벤트를 저장하는 예이다.
<healthMonitoring 활성화="true" heartBeatInterval="0">
<버퍼 모드>
<add name="중요 알림" maxBufferSize="100" maxFlushSize="20"urgentFlushThreshold="1" 일반FlushInterval="무한" 긴급FlushInterval="00:01:00" maxBufferThreads="1"/> <
이름 추가="분석 " maxBufferSize="1000" maxFlushSize="100" 긴급FlushThreshold="100"
RegularFlushInterval="00:05:00" 긴급FlushInterval="00:01:00" maxBufferThreads="1"/>
</bufferModes>
<providers>
<add name="CriticalMailEventProvider" type="System.Web.Management.SimpleMailWebEventProvider, System.Web ..." [email protected] [email protected] Priority="높음" bodyHeader=" 경고!"
bodyFooter="최대한 조사하십시오." subjectPrefix="조치가 필요합니다." buffer="true" bufferMode="중요한 알림" maxEventLength="4096" maxSize="4096" maxMessagesPerNotification="1"/>
<이름 추가="SqlWebEventProvider" 유형="System.Web.Management.SqlWebEventProvider, System.Web ..."
ConnectionStringName="LocalSqlServer" maxEventDetailsLength="1073741823" buffer="true"
bufferMode="분석"/>
</providers>
<eventMappings>
<add name="All Errors" type="System.Web.Management.WebBaseErrorEvent, System.Web ..."/>
<add name="요청 처리 오류" type="System.Web.Management.WebRequestErrorEvent, System.Web .../>
</eventMappings>
<profiles>
<add name="Default" minInstances="1" maxLimit=" 무한" minInterval="00:10:00"/>
</profiles>
<rules>
<add name="모든 오류 기본값" eventName="모든 오류" 공급자="SqlWebEventProvider" profile="Default"
minInterval="00:00:30"/>
<add name="요청 처리 오류" eventName="요청 처리 오류" 공급자="CriticalMailEventProvider" profile="Default"/>
</rules>
</healthMonitoring>
이 예에서는 에서는 SQL 공급자를 사용하여 모든 오류 이벤트를 기록하고 메일 공급자를 사용하여 웹 요청 오류 이벤트가 활성화될 때 메시지를 보냅니다.
다음은 ASP .NET 2.0과 함께 릴리스된 일부 이벤트입니다.
System.Web.Management.WebBaseEvent
System.Web.Management.WebHeartBeatEvent
System.Web.Management.WebApplicationLifetimeEvent
System.Web.Management.WebRequestEvent
System.Web.Management.WebBaseErrorEvent
System.Web.Management.WebErrorEvent
System.Web.Management.WebRequestErrorEvent
System.Web.Management.WebAuditEvent
System.Web.Management.WebFailureAuditEvent
System.Web.Management.WebSuccessAuditEvent
System.Web.Management.WebManagementEvent
System.Web.Management.WebViewStateFailureAuditEvent
System.Web.Management.WebAuthenticationFailureAuditEvent
System.Web.Management.WebAuthenticationSuccessAuditEvent는
이러한 이벤트를 사용하여 공급자를 프로파일링할 수 있습니다. WebBaseEvent 클래스에서 상속된 고유한 이벤트를 만들 수도 있습니다.
이벤트를 자동으로 깨우려면 WebBaseEvent 클래스의 wakeup 메서드를 사용할 수 있습니다
.
{
//....
}
잡기(예외 e)
{
if(HealthMonitoringManager.Enabled)
{
WebBaseEvent.Raise(new WebErrorEvent("내 오류 메시지", null, 5000, e));
}
}
또는:
if (HealthMonitoringManager.Enabled)
{
WebErrorEvent 이벤트 = new WebErrorEvent("내 오류 메시지", null, 5000, e);
이벤트.레이즈();
}