2011-01-04 5 views
0

ASP.Net Healthmonitoring에 대한 사용자 지정 공급자를 만들고 사용하는 방법에 대한 연습을 찾고 있습니다.ASP.Net Healthmonitoring에 대한 사용자 지정 공급자를 작성하고 구성하는 방법은 무엇입니까?

지금까지 나는 실수로 전자 메일을 생성하는 전자 메일 공급자와 만 작업했습니다. 기본적으로 동일한 일을하고 싶지만 더 많은 유연성이 필요합니다.
이벤트에 액세스 할 수있는 방식으로 HealthMonitoring 기능을 사용하고 싶습니다. (저는 global.asax에서 Application_OnError 이벤트를 사용하고 싶지 않습니다) 사용자 정의 코드를 실행하기 위해 전자 메일에 제공된 모든 정보를 "OnNewHealthMonitoringEntry"처럼 던집니다.

편집 : 나는 내 자신의 사용자 지정 공급자를 구축하고 그것을 구현 할 수 있었다 http://www.asp.net/general/videos/how-do-i-create-a-custom-provider-for-logging-health-monitoring-events 여기에 제공된 소스 코드를 기반으로
. 이제 사용자 지정 공급자를 구성하기 위해 몇 가지 새로운 특성을 추가하고 싶습니다. 여기 은 Web.config를 보이는 것입니다 같은 :

<healthMonitoring> 
    <bufferModes> 
     <add name="Log Notification" maxBufferSize="1" maxFlushSize="1" urgentFlushThreshold="1" regularFlushInterval="Infinite" urgentFlushInterval="00:00:10"/> 
    </bufferModes> 
    <providers> 
     <add name="FileEventProvider" buffer="true" bufferMode="Log Notification" type="healthmonitoringtest.FileHealthMonitorEventProvider"/> 
    </providers> 
    <profiles> 
     <add name="Custom" minInstances="1" maxLimit="Infinite" minInterval="00:00:00"/> 
    </profiles> 
    <rules> 
     <add name="File Event Provider" eventName="All Errors" provider="FileEventProvider" profile="Custom"/> 
    </rules> 
</healthMonitoring> 

내가 말하는 오류가 발생합니다이

<providers> 
    <add name="FileEventProvider" buffer="true" bufferMode="Log Notification" foo="bar" type="healthmonitoringtest.FileHealthMonitorEventProvider"/> 
</providers> 

처럼 공급자에 속성을 추가하려고하면 :

'System.Configuration.ConfigurationErrorsException'형식의 예외 System.Web.dll에서 이 발생했지만 사용자 코드에서 이 처리되지 않았습니다. Additiona l 정보 : FileEventProvider 구성에서 foo 이라는 예기치 않은 특성이 있습니다.

healthMonitoring 섹션에 가까운 맞춤형 공급자에게 필요한 구성을 저장할 수 있습니까? 내가 appSettings 노드에 설정을 포함 할 수있을 것 같아요,하지만 어떻게 든 그것을 (healthMonitoring 노드 내부) 속성으로 구성하고 싶습니다. 그게 가능하니?

Edit2가 : 이 문서에서 살펴 수 있습니다 http://www.tomot.de/en-us/article/6/asp.net/how-to-create-a-custom-healthmonitoring-provider-that-sends-e-mails

+1

찾은 링크 중 어떤 부분이 불분명 했습니까? 아마도 우리가 거기에서 시작한다면 우리는 당신에게 좋은 대답을 줄 수 있습니다. – NotMe

+0

'불분명 함'으로이 코드 샘플을 사용하는 접근 방식이 사용자 지정 공급자를 사용하기위한 올바른 방법인지 아니면 오래된 일부 권장되지 않는 코드인지 알 수 없음 – citronas

+0

내 질문을 편집하고 공급자에 임의의 특성을 사용하려고 시도하는 중 오류를 추가했습니다. . 내 Google 검색이 내 sitution과 관련된 답변을 표시하지 않았습니다. (또한 새로운 질문을 열지 못했습니다.) – citronas

답변

2

사용자 정의 이벤트를 만드는 개까지 건강 모니터링 시스템 사용의 기본 사항을 통해 당신을 데려 갈 것이다 series of articles 다음.

다음 26 minute video은 이벤트를 텍스트 기반 로그 파일에 기록하는 사용자 지정 공급자를 만드는 과정을 안내합니다. 코멘트

당신의 갱신을 보면 당신이 당신의 사용자 지정 공급자를 기지 BufferedWebEventProvider 클래스의 소스를보고 반사판을 사용하여 바탕으로

UPDATE, 나는 BufferedWebEventProvider의 초기화 방법은 검사를 수행 것을 발견했다 끝에는 인식하지 못하는 속성이 있는지 확인하십시오. 이는 BufferedWebEventProvider의 등록 정보 또는 필드에 지정되는 즉시 구성 NameValueCollection 매개 변수에서 값을 제거하여 수행됩니다. 그런 다음 config 매개 변수가 비어 있는지 확인하기위한 점검이 수행되고, 그렇지 않은 경우 여분의 속성이 추가되어 예외가 발생하게됩니다.

  1. 즉시 당신이에 할당으로
  2. 가 추가 속성을 제거하는 방법의 끝에 base.Initialize에 전화를 이동 :

    이 문제를 해결하는 방법에 관해서는, 하나 개의 옵션이다 변수는 공급자와 동일합니다. 다음과 같은

뭔가 작동합니다 :

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 
    { 
     foo = config["foo"]; 
     if (String.IsNullOrEmpty(foo)) 
     { 
      // You can set a default value for foo 
     } 

     //remove foo from the config just like BufferedWebEventProvider with the other 
     //attributes. Note that it doesn't matter if someone didn't proivde a foo attribute 
     //because the NameValueCollection remains unchanged if you call its Remove method 
     //and the name doesn't exist. 
     config.Remove("foo"); 

     base.Initialize(name, config); 
    } 

는 희망이 당신을 위해 밖으로 작동합니다.

+0

감사합니다. 동영상이 내게 필요한 모든 정보를 제공했습니다. – citronas

+0

@citronas 서비스를 제공하게되어 기쁩니다 :) –

+0

;) 답변을 수락하지 못해서 죄송합니다. 하지만 난 사용자 정의 공급자와 구성 문제를 우연히 만났어. 다시 볼까? =) 내 질문을 편집했습니다 – citronas

관련 문제