Es gibt drei Aspekte der Ausnahmebehandlung in ASP.NET:
Nachverfolgung – Nachverfolgung der Programmausführung auf Seiten- oder Anwendungsebene.
Fehlerbehandlung – Behandeln Sie Standard- oder benutzerdefinierte Fehler auf Seiten- oder Anwendungsebene.
Debuggen – Durchlaufen Sie das Programm und setzen Sie Haltepunkte, um den Code zu analysieren.
In diesem Kapitel besprechen wir die Rückverfolgung und Handhabung. Und in diesem Kapitel behandeln wir das Debuggen.
Um die Konzepte zu verstehen, erstellen Sie die folgende Beispielanwendung. Es verfügt über ein Label-Steuerelement, eine Dropdown-Liste und einen Link. Die Dropdown-Liste lädt eine Reihe von Zitaten und das ausgewählte Zitat wird in der Beschriftung unten angezeigt. Es gibt auch einen Hyperlink, der auf einen Link verweist, der nicht existiert.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Ablaufverfolgung, Debugging und Fehlerbehandlung </title> </head> <body> <form id= "form1" runat="server"> <div> <asp:Label ID="lblheading" runat="server" Text="Tracing, Debuggin und Fehlerbehandlung"> </asp:Label> <br /> <br / > <asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat= "server"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="mylink.htm">Link zu:</asp:HyperLink> </div> </form> </body></html>
Code nach Datei:
öffentliche Teilklasse _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {"Phantasie ist wichtiger als Wissen.", "Albert Einsten"}, {"Nehmen Sie eine Tugend an, wenn Sie sie nicht haben" "Shakespeare"}, {"Ein Mann kann sich ohne seine eigene Zustimmung nicht wohlfühlen", "Mark Twain"}, {"Vorsicht vor dem jungen Arzt und dem alten Friseur", "Benjamin Franklin"}, {"Was auch immer in Wut begann, endet in Schande", "Benjamin Franklin"} }; ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1])); ddlquotes_SelectedIndexChanged(object sender, EventArgs e) { if (ddlquotes.SelectedIndex != -1) { lblquotes.Text = String.Format("{0}, Quote: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue) ; } }}
Um die Ablaufverfolgung auf Seitenebene zu ermöglichen, müssen Sie die Page-Direktive ändern und ein Trace-Attribut wie folgt hinzufügen:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
Wenn Sie nun die Datei ausführen, erhalten Sie Trace-Informationen:
In der Kopfzeile werden folgende Informationen bereitgestellt:
Sitzungs-ID
Statuscode
Zeitpunkt der Anfrage
Art der Anfrage
Anforderungs- und Antwortkodierung
Bei jeder Seitenanforderung zeigt der vom Server gesendete Statuscode den Namen und ggf. die Fehlerzeit an. Die folgende Tabelle zeigt gängige HTTP-Statuscodes:
Nummer | beschreiben |
---|---|
Benachrichtigung (100 - 199) | |
100 | weitermachen |
101 | Umwandlungsvertrag |
Erfolg (200 - 299) | |
200 | OK |
204 | Kein Inhalt |
Weiterleiten (300 - 399) | |
301 | dauerhaft bewegen |
305 | Verwenden Sie einen Proxy |
307 | temporäre Weiterleitung |
Fehler vom Kunden (400–499) | |
400 | Ungültige Anforderung |
402 | Zahlungsanforderungen |
404 | nicht gefunden |
408 | Timeout anfordern |
417 | Erwarten Sie, dass Sie scheitern |
Fehler vom Server (500 - 599) | |
500 | interner Serverfehler |
503 | Dienst nicht verfügbar |
505 | HTTP-Version wird nicht unterstützt |
Unter den Informationen der obersten Ebene befindet sich ein Trace-Protokoll, das Details zum Seitenlebenszyklus enthält. Es gibt die seit der Initialisierung der Seite verstrichene Zeit in Sekunden an.
Der nächste Abschnitt ist der Kontrollbaum, der alle Steuerelemente auf der Seite in einem hierarchischen Format auflistet:
Die letzte Deklaration in Sitzung und Anwendung ist die Sammlung von Zusammenfassungen, Cookies und Headern, gefolgt von allen Servervariablen.
Mithilfe von Trace-Objekten können Sie der Trace-Ausgabe benutzerdefinierte Informationen hinzufügen. Es müssen zwei Methoden ausgeführt werden: die Schreibmethode und die Warnmethode.
Ändern Sie den Page_Load-Ereignishandler, um die Write-Methode zu erkennen:
protected void Page_Load(object sender, EventArgs e){ Trace.Write("Page Load"); if (!IsPostBack) { Trace.Write("Not Post Back, Page Load"); ............. }}
Führen Sie aus, um die Auswirkungen zu sehen:
Um die Warn-Methode zu erkennen, erzwingen wir einen Fehlercode in den ausgewählten Ereignishandler für Indexänderungen:
try{ int a = 0; int b = 9 / a;}catch (Exception e){ Trace.Warn("UserAction", "processing 9/a", e);}
Try-Catch ist ein C#-Programmierkonstrukt. Der Try-Block enthält jeglichen Code, der möglicherweise einen Fehler generiert oder nicht, und der Catch-Block erfasst den Fehler. Wenn das Programm ausgeführt wird, sendet es Warnungen im Trace-Protokoll.
Das Tracking auf Anwendungsebene gilt für alle Seiten der Website. Die Implementierung erfolgt durch Einfügen des folgenden Codes in die Datei web.config:
<system.web> <trace aktiviert="true" /></system.web>
Obwohl ASP.NET alle Laufzeitfehler erkennt, gibt es immer noch einige kleine Fehler. Das Beobachten von Fehlern durch Tracing ist Sache der Entwickler, nicht der Benutzer.
Um dies zu verhindern, können Sie daher Fehlerauflösungseinstellungen in der web.config Ihrer Anwendung hinzufügen. Es handelt sich um eine anwendungsweite Fehlerbeseitigung. Sie können beispielsweise den folgenden Code zur Datei web.config hinzufügen:
<configuration> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" weitergeleitet="NoAccess.htm" /> <error statusCode="404" weitergeleitet="FileNotFound .htm" /> </customErrors> </system.web><configuration>
Einige der möglichen Attribute: - **Modus:** Es erlaubt oder verbietet benutzerdefinierte Fehlerseiten. Es gibt drei mögliche Werte: - **Ein:** Zeigt eine benutzerdefinierte Seite an. - **Aus:** Zeigt die ASP.NET-Fehlerseite (gelbe Seite) an. - **RemoteOnly:** Zeigt dem Client benutzerdefinierte Fehler und lokale ASP.NET-Fehler an. - **defaultRedirect:** Es enthält die URL der Seite, die im Falle ungelöster Fehler angezeigt werden soll. Um unterschiedliche benutzerdefinierte Fehlerseiten für unterschiedliche Fehlertypen zu platzieren, werden Untertags verwendet, in denen unterschiedliche Fehlerseiten basierend auf dem Statuscode des Fehlers angegeben werden. Um eine Fehlerauflösung auf Seitenebene zu erreichen, kann die Page-Direktive wie folgt geändert werden: „Da das ASP.NET-Debugging darin ein wichtiges Thema ist, werden wir es im nächsten Kapitel separat besprechen.