Jeder, der schon einmal eine Webanwendung mit ASP entwickelt hat, muss wissen, wie mühsam das Debuggen einer Webanwendung ist. In ASP ist das Debuggen mühsam und beinhaltet normalerweise das Drucken des Werts einer Variablen mithilfe der Response.Write()-Methode. Fragen Sie sich also: Wie oft haben Sie vergessen, Debugging-Anweisungen zu entfernen, bevor Sie Ihre Anwendung bereitstellen?
Diese Situation hat sich mit der Einführung von .NET Framework-Komponenten völlig geändert. In .NET können Sie die Ausführung einer gesamten Webanwendung mithilfe des Debuggers in Visual Studio .NET oder mithilfe der Trace-Klasse im System.Web.TraceContext-Namespace verfolgen. In diesem Artikel wird gezeigt, wie Sie die Trace-Klasse zur Unterstützung Ihrer Debugging-Arbeit verwenden.
Verwendung der Trace-Klasse
ASP.NET enthält eine Trace-Klasse, die dabei hilft, den Informationsfluss der Anwendung zu verfolgen. Anstatt das Response-Objekt zum Debuggen zu verwenden, können Sie jetzt die Trace-Klasse verwenden, um Debugging-Informationen auszudrucken.
Um seine Verwendung zu demonstrieren, erstellen wir zunächst eine ASP.NET-Webanwendung und platzieren ein Button- und ein ListBox-Steuerelement auf dem Standard-WebForm1 (wie in Abbildung 1 dargestellt). Füllen Sie das ListBox-Steuerelement mit drei Elementen und setzen Sie seine AutoPostBack-Eigenschaft auf True.
Abbildung 1. Füllen des Standard-WebForm1 |
Für diesen Artikel möchte ich den Ausführungsfluss meiner Anwendung verfolgen. Aktivieren Sie zunächst das Tracking. Die Seitenanweisung muss das Trace-Attribut enthalten und sein Wert ist auf „True“ gesetzt (wechseln Sie in den HTML-Quellmodus), wie in Abbildung 2 dargestellt.
Abbildung 2. Aktivierungsverfolgung |
Als Nächstes füge ich eine Trace-Anweisung in das Ladeereignis des Formulars ein, damit ich weiß, ob ein Postback aufgetreten ist. Das PostBack-Ereignis ist eine der verwirrendsten Funktionen in ASP.NET und führt bei Entwicklern, die neu bei ASP.NET sind, häufig zu Fehlern.
Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Behandelt MyBase.Load 'Platzieren Sie hier den Benutzercode zum Initialisieren der Seite Trace.Write("Seite geladen") Wenn nicht, dann IsPostBack Trace.Write("Nicht in einem Postback") 'Führen Sie einige Vorgänge aus, wenn ein Postback auftritt. Else Trace.Write("In einem Postback") 'Führen Sie einige Operationen durchEnd If Sub beenden |
Ich würde auch gerne wissen, ob ein Postback auftritt, wenn ein ListBox-Element ausgewählt wird:
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As _ System.Object, _ ByVal e As System.EventArgs) Behandelt _ ListBox1.SelectedIndexChanged Trace.Write("Listbox-Postback") Sub beenden |
Wenn die obige ASP.NET-Anwendung ausgeführt wird, wird die folgende Ausgabe angezeigt (siehe Abbildung 3):
Abbildung 3. Tracking-Informationen anzeigen |
Sie können feststellen, dass beim ersten Laden von WebForm1 die Zeichenfolgen „Seite geladen“ und „Nicht in einem Postback“ angezeigt werden. Wenn Sie auf WebForm1 auf die Schaltfläche klicken, können Sie den in Abbildung 4 dargestellten Datensatz sehen. Wenn auf die ListBox geklickt wird, wird ebenfalls die Zeichenfolge „Listbox-Postback“ angezeigt.
Abbildung 4. Überprüfen Sie die Trace-Informationen |
Die Tracking-Seite enthält die folgenden Abschnitte (nicht alle Informationen werden in Abbildung 3 angezeigt):
Abschnitt | Beschreibung |
Anfragedetails | Beschreibt Informationen im Zusammenhang mit der Anfrage, z. B. die Konversations-ID, die Codierung und den Zeitpunkt der Anfrage. |
Trace-Informationen | enthalten Details zu aktuell ausgeführten Anwendungen. In diesem Abschnitt werden Tracking-Informationen angezeigt. |
Der Steuerelementbaum | zeigt Informationen zu Steuerelementen auf einer Seite und zur Größe der ausgeblendeten Viewstate-Felder an. |
Die Cookie-Sammlung | zeigt die von der Seite gesetzten Cookies und ihre Werte an. |
Die Header-Sammlung | zeigt HTTP-Header-Informationen wie Inhaltslänge und Benutzeragent an. |
Die Forms-Sammlung | zeigt die Namen der Steuerelemente auf einer Seite und ihre Werte an. |
Servervariablen | zeigt serverseitige Umgebungsvariablen an. |
Beachten Sie, dass unsere Tracking-Informationen unterhalb des Abschnitts „Tracking-Informationen“ angezeigt werden. Wenn Sie die Ablaufverfolgung deaktivieren möchten, setzen Sie einfach das Trace-Attribut in der Seitenanweisung auf False. Es besteht keine Notwendigkeit, Trace-Anweisungen aus Ihrer Anwendung zu entfernen. Das Deaktivieren des Debuggens ist jetzt so einfach wie das Festlegen eines booleschen Werts.
Um die Ablaufverfolgung ein-/auszuschalten, müssen Sie lediglich den Wert des Trace-Attributs in der Seitenanweisung ändern. Sie können die Ablaufverfolgung auch programmgesteuert mithilfe der Trace-Klasse deaktivieren. Die Mitglieder der Trace-Klasse sind wie folgt:
Die | Eigenschaftsbeschreibung |
IsEnabled | gibt an, ob die Verfolgung der aktuellen Anfrage aktiviert werden soll. |
TraceMode | legt den Verfolgungsmodus fest: sortByCategory oder sortByTime. |
Methode | Beschreibung |
Warn | zeigt Trace-Informationen in Rot an. |
Trace-Informationen schreiben | . |
Um die Nachverfolgung programmgesteuert zu deaktivieren, verwenden Sie die folgende Anweisung im Ladeereignis von WebForm1:
In unserem Fall werden die Tracking-Informationen nicht prominent angezeigt, sodass sie von anderen Tracking-Informationen verdeckt werden. Die Warn()-Methode der Trace-Klasse kann Trace-Informationen in Rot drucken. Anstatt also den Code so zu schreiben:
Trace.Write("Seite geladen") |
Stattdessen:
Trace.Warn("Seite geladen") |
Abbildung 5 zeigt die in Rot angezeigten Debugging-Informationen für die Warn()-Methode.
Abbildung 5. Verwenden der Warn()-Methode zum Anzeigen von Trace-Informationen in Rot |
Tracking-Informationen sortieren
Das Einfügen mehrerer Ablaufverfolgungsanweisungen in eine Anwendung kann manchmal unübersichtlich werden. Das Tracking ist einfacher, wenn Ihre Tracking-Informationen in verschiedene Kategorien unterteilt werden können. Mit der Trace-Klasse können wir Trace-Informationen nach Kategorie klassifizieren und sortieren.
Das folgende Beispiel zeigt, wie Tracking-Informationen nach Kategorie gruppiert werden:
Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Behandelt MyBase.Load Trace.TraceMode = TraceMode.SortByCategory 'Platzieren Sie hier den Benutzercode zum Initialisieren der Seite Trace.Warn("Page_Load", "Page geladen") Wenn nicht, dann IsPostBack 'Führen Sie einige Operationen aus. Trace.Warn("Page_Load", "Nicht in einem Postback") Anders Trace.Warn("Page_Load", "In einem Postback") Ende wenn Sub beenden
Private Sub ListBox1_SelectedIndexChanged(ByVal sender _ Als System.Object, ByVal e As _ System.EventArgs) Behandelt _ ListBox1.SelectedIndexChanged Trace.Warn("ListBox", "Listbox-Postback") Sub beenden |
Beim Ausführen dieses Beispiels werden die folgenden Debugging-Informationen angezeigt, gruppiert nach Kategorie (siehe Abbildung 6):
Abbildung 6. Nach Kategorie sortieren |
Lassen Sie uns den obigen Code analysieren:
Trace.TraceMode = TraceMode.SortByCategory |
Die TraceMode-Eigenschaft legt die von der Ablaufverfolgung unterstützten Modi fest:
· SortByCategory: Tracking-Informationen nach Typ sortieren.
· SortByTime: Trace-Informationen entsprechend der Ausführungsreihenfolge anzeigen.
Da wir den Sortiermodus nach Kategorie ausgewählt haben, zeigt Abbildung 7 die Informationen nach Kategorie sortiert.
Trace.Warn("Page_Load", "Seite geladen") |
Das Warn-Attribut zeigt die Meldung in Rot an. Beachten Sie, dass es sich um eine überladene Methode handelt. Im Beispiel übergeben wir ihm zwei Parameter. Die erste Eingabekategorie (Kategorie) und der zweite Parameter dienen zum Abrufen der Nachricht (Nachricht).
Zusätzlich zum Festlegen des Trace-Modus mithilfe der Trace-Klasse können Sie den Trace-Modus auch mithilfe von Seitendirektiven festlegen:
<%@ Page Language="vb" Trace="true" TraceMode="SortByCategory" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> |
Anwendungsablaufverfolgung
Im letzten Abschnitt geht es um die Seitenverfolgung, die den Fluss von Ausführungsinformationen innerhalb einer Seite verfolgt. ASP.NET unterstützt auch die Ablaufverfolgung auf Anwendungsebene. Sie wird in der Datei web.config im Abschnitt „trace“ festgelegt:
Um die Ablaufverfolgung auf Anwendungsebene zu aktivieren, legen Sie die folgenden Werte fest:
Eigenschaftswert | Beschreibung | Aktiviert |
Wahr | Aktiviert | oder deaktiviert die Ablaufverfolgung auf Anwendungsebene. |
requestLimit | 10 | legt die maximale Anzahl der zu verfolgenden Anfragen fest. |
pageOutput | False | zeigt Tracking-Informationen am Ende der Seite an. |
TraceMode | sortByTime | Trace-Informationssortiermethode. |
localOnly | True | legt die Möglichkeit fest, Browserspuren auf nicht lokalen Computern anzuzeigen. |
Beim Laden der Anwendung werden die Tracking-Informationen nicht auf der Seite angezeigt. Um Trace-Informationen anzuzeigen, müssen wir den Trace-Viewer (trace.axd) verwenden:
Abbildung 7. Ablaufverfolgung auf Anwendungsebene |
Abbildung 7 zeigt die Ablaufverfolgungsinformationen für die letzten sechs Anforderungen der Anwendung. Um Details zu jeder Anfrage anzuzeigen, klicken Sie für jede Zeile auf den Link „Details anzeigen“.
Beachten Sie, dass die Ablaufverfolgung deaktiviert wird, wenn „trace“ in der Datei „web.config“ auf „true“ und in der Seitenanweisung auf „false“ festgelegt ist.
Zusammenfassen
ASP.NET erleichtert das Debuggen von Webanwendungen erheblich. Nachdem Sie nun wissen, wie man Tracking nutzt, probieren Sie es aus und sehen Sie, wie sehr es Ihre Produktivität steigert!