Hay tres aspectos del manejo de excepciones en ASP.NET:
Seguimiento : seguimiento de la ejecución del programa a nivel de página o de aplicación.
Manejo de errores : maneje errores estándar o personalizados a nivel de página o aplicación.
Depuración : avance por el programa y establezca puntos de interrupción para analizar el código.
En este capítulo, analizaremos el rastreo y el manejo. Y en este capítulo, cubriremos la depuración.
Para comprender los conceptos, cree la siguiente aplicación de ejemplo. Tiene un control de etiqueta, una lista desplegable y un enlace. La lista desplegable carga una serie de cotizaciones y la cotización seleccionada se mostrará en la etiqueta a continuación. También tiene un hipervínculo que apunta a un vínculo que no existe.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional// ES" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Seguimiento, depuración y manejo de errores </title> </head> <body> <form id= "form1" runat="servidor"> <div> <asp:Label ID="lblheading" runat="servidor" Text="Seguimiento, depuración y manejo de errores"> </asp:Label> <br /> <br / > <asp:DropDownList ID="ddlquotes" runat="servidor" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat= "servidor"> </asp:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="servidor" NavigateUrl="mylink.htm">Enlace a:</asp:HyperLink> </div> </form> </body></html>
Código después del archivo:
clase parcial pública _Default: System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {"La imaginación es más importante que el conocimiento.", "Albert Einsten"}, {"Asume una virtud, si no la tienes" "Shakespeare"}, {"Un hombre no puede estar cómodo sin su propia aprobación", "Mark Twain"}, {"Cuidado con el joven médico y el viejo barbero", "Benjamin Franklin"}, {"Lo que comienza con ira termina en vergüenza", "Benjamin Franklin"} } for (int i=0; i<quotes.GetLength(0) ); i++) ddlquotes.Items.Add(new ListItem(comillas[i,0], comillas[i,1])); ddlquotes_SelectedIndexChanged(remitente del objeto, EventArgs e) { if (ddlquotes.SelectedIndex != -1) { lblquotes.Text = String.Format("{0}, Quote: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue) ; } }}
Para permitir el seguimiento a nivel de página, debe modificar la directiva Página y agregar un atributo de seguimiento de la siguiente manera:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
Ahora, cuando ejecute el archivo, obtendrá información de seguimiento:
Proporciona la siguiente información en el encabezado:
ID de sesión
Código de estado
Hora de Solicitud
Tipo de Solicitud
Codificación de solicitud y respuesta
Cada vez que se solicita la página, el código de estado enviado desde el servidor muestra el nombre y la hora del error, si corresponde. La siguiente tabla muestra códigos de estado HTTP comunes:
número | describir |
---|---|
Notificación(100 - 199) | |
100 | continuar |
101 | acuerdo de conversión |
Éxito(200 - 299) | |
200 | DE ACUERDO |
204 | Sin contenido |
Redirigir (300 - 399) | |
301 | mudarse permanentemente |
305 | Usa un proxy |
307 | redirección temporal |
Errores del cliente (400 - 499) | |
400 | Solicitud incorrecta |
402 | Requisitos de pago |
404 | extraviado |
408 | Solicitar tiempo de espera |
417 | esperar fallar |
Error del servidor (500 - 599) | |
500 | Error Interno del Servidor |
503 | Servicio No Disponible |
505 | Versión HTTP no compatible |
Debajo de la información de nivel superior, hay un registro de seguimiento, que proporciona detalles del ciclo de vida de la página. Proporciona el tiempo transcurrido en segundos desde que se inicializó la página.
La siguiente sección es el árbol de controles, que enumera todos los controles de la página en un formato jerárquico:
La última declaración en Sesión y Aplicación son los resúmenes, las cookies y la colección de encabezados seguidos de todas las variables del servidor.
Los objetos de seguimiento le permiten agregar información personalizada a la salida del seguimiento. Tiene dos métodos para completar: método de escritura y método de advertencia.
Cambie el controlador de eventos Page_Load para detectar el método de escritura:
protected void Page_Load(remitente del objeto, EventArgs e){ Trace.Write("Carga de página"); if (!IsPostBack) { Trace.Write("No publicar, carga de página"); ............. }}
Corre para ver el impacto:
Para detectar el método Warn, fuercemos algún código de error en el controlador de eventos de cambio de índice seleccionado:
intentar{ int a = 0; int b = 9 / a;}catch (Excepción e){ Trace.Warn("UserAction", "procesando 9/a", e);}
Try-Catch es una construcción de programación C#. El bloque try contiene cualquier código que pueda o no generar un error, y el bloque catch captura el error. Cuando el programa se ejecuta, envía advertencias en el registro de seguimiento.
El seguimiento a nivel de aplicación se aplica a todas las páginas del sitio web. Se implementa colocando el siguiente código en el archivo web.config:
<sistema.web> <trace enable="true" /></system.web>
Aunque ASP.NET detecta todos los errores de tiempo de ejecución, todavía quedan algunos errores pequeños. La observación de errores mediante el seguimiento es tarea de los desarrolladores, no de los usuarios.
Por lo tanto, para evitar que esto suceda, puede agregar configuraciones de resolución de errores en el archivo web.config de su aplicación. Es una resolución de errores en toda la aplicación. Por ejemplo, puede agregar el siguiente código al archivo web.config:
<configuración> <system.web> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirigir="NoAccess.htm" /> <error statusCode="404" redirigir="FileNotFound .htm" /> </customErrors> </system.web><configuración>
Algunos de los posibles atributos: - **Modo:** Permite o no permite páginas de error personalizadas. Tiene tres valores posibles: - **Activado:** Muestra una página personalizada. - **Off:** Muestra la página de error de ASP.NET (página amarilla) - **remoteOnly:** Muestra errores personalizados al cliente, mostrando errores locales de ASP.NET. - **defaultRedirect:** Contiene la URL de la página a mostrar en caso de errores no resueltos. Para colocar diferentes páginas de error personalizadas para diferentes tipos de error, se utilizan subetiquetas, donde se especifican diferentes páginas de error según el código de estado del error. Para lograr la resolución de errores a nivel de página, la directiva Page se puede modificar a: `````` Debido a que la depuración de ASP.NET es un tema importante, lo analizaremos por separado en el siguiente capítulo.