2011-01-04 4 views
0

Ich bin auf der Suche nach einer exemplarischen Vorgehensweise zum Erstellen und Verwenden eines benutzerdefinierten Providers für ASP.Net Healthmonitoring.Wie schreibe und konfiguriere ich einen benutzerdefinierten Provider für ASP.Net Healthmonitoring?

Bisher habe ich nur mit dem E-Mail-Provider gearbeitet, der E-Mails bei Fehlern erzeugt. Grundsätzlich möchte ich das gleiche tun, aber mit mehr Flexibilität:
Ich möchte die HealthMonitoring-Funktionen (ich möchte nicht das Application_OnError-Ereignis in der global.asax verwenden) in einer Weise, die mir Zugriff auf ein Ereignis haben , die wie "OnNewHealthMonitoringEntry" mit allen in der E-Mail bereitgestellten Informationen ausgelöst wird, um benutzerdefinierten Code auszuführen.

Edit:
Basierend auf den Quellcode hier zur Verfügung gestellten http://www.asp.net/general/videos/how-do-i-create-a-custom-provider-for-logging-health-monitoring-events konnte ich meine eigenen benutzerdefinierten Anbieter bauen und implementieren. Jetzt möchte ich einige neue Attribute hinzufügen, um meinen benutzerdefinierten Provider zu konfigurieren. Hier ist, was die web.config wie folgt aussieht:

<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> 

Wenn ich ein Attribut zum Provider hinzuzufügen versuchen, wie diese

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

Ich werde einen Fehler zu sagen:

Eine Ausnahme vom Typ 'System.Configuration.ConfigurationErrorsException' in System.Web.dll aufgetreten ist, aber nicht in Benutzercode Additiona behandelt wurde l Information: Unerwartetes Attribut foo in der Konfiguration des FileEventProvider.

Ist es möglich, die Konfiguration für benutzerdefinierte Anbieter in der Nähe des Abschnitts healthMonitoring zu speichern? Ich denke, ich könnte die Einstellungen in den appSettings-Knoten aufnehmen, aber ich möchte es irgendwie mit Attributen konfigurieren (innerhalb des HealthMonitoring-Knotens). Ist das möglich?

EDIT2: Sie können einen Blick auf diesen Artikel nehmen: http://www.tomot.de/en-us/article/6/asp.net/how-to-create-a-custom-healthmonitoring-provider-that-sends-e-mails

+1

Welcher Teil des Links, den Sie gefunden haben, war unklar? Vielleicht können wir Ihnen eine gute Antwort geben, wenn wir dort anfangen. – NotMe

+0

Mit 'unklar' meinte ich, wenn mein Ansatz mit diesem Codebeispiel der richtige Weg ist, einen benutzerdefinierten Anbieter zu verwenden, oder wenn es sich um einen alten veralteten Code handelt – citronas

+0

Ich bearbeitete meine Frage und fügte einen Fehler hinzu, der versuchte, willkürliche Attribute für den Anbieter zu verwenden . Meine Google-Suche ergab keine für meine Situation relevanten Antworten. (Es fühlte sich auch nicht richtig an, eine neue Frage dafür zu öffnen) – citronas

Antwort

2

Die series of articles Nachfolgend erhalten Sie durch die Grundlagen nehmen von der Health Monitoring System bis zu dem Erstellen von benutzerdefinierten Ereignisse verwenden.

Anschließend werden Sie durch die folgenden Schritte weitergeleitet: 26 minute video Erstellen eines benutzerdefinierten Anbieters, der Ereignisse in einer textbasierten Protokolldatei aufzeichnet.

UPDATE auf KOMMENTAR

bei Ihrer Update Suchen und Reflektor für die BufferedWebEventProvider Klasse an der Quelle zu suchen, die Sie Ihren benutzerdefinierten Anbieter stützen, ich habe festgestellt, dass die Methode Initialize in BufferedWebEventProvider einen Scheck tut am Ende um zu sehen, ob es irgendwelche Attribute gibt, die es nicht erkennt. Dies geschieht, indem Werte aus dem Parameter NameValueCollection der Konfiguration entfernt werden, sobald sie den Eigenschaften oder Feldern von BufferedWebEventProvider zugewiesen sind. Dann wird geprüft, ob der Parameter config leer ist, und wenn nicht, werden zusätzliche Attribute hinzugefügt, wodurch eine Ausnahme ausgelöst wird.

, wie dieses Problem zu beheben, ist eine Option:

  1. den Anruf zu base.Initialize Bewegen zum Ende des Verfahrens
  2. , sobald die zusätzlichen Attribute entfernen, wie Sie sie zuweisen Variablen wie der Provider.

etwa wie folgt funktionieren würde:

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); 
    } 

Hoffentlich funktioniert für Sie.

+0

Danke, das Video lieferte mir alle notwendigen Informationen – citronas

+0

@citronas Glücklich zu sein :) –

+0

;) Entschuldigung, dass ich Ihre Antwort als akzeptiert markiert, aber ich bin über ein Konfigurationsproblem mit meinem benutzerdefinierten Anbieter gestolpert. Würde es dir etwas ausmachen, einen zweiten Blick darauf zu werfen? =) Ich habe meine Frage bearbeitet – citronas