/*------------------------------------------------ ----------------
* Derechos de autor (C)
* reservados todos los derechos.
*
* Nombre del archivo: ErrorManager.cs
* Descripción de la función: reparación de errores unificada en asp.net Para que coincida con esta categoría, se debe agregar una página de visualización de información de error, como error.aspx.
*
* Instrucciones de uso: 1. Inicie el temporizador en Application_Start() (borre la información de error periódicamente): ErrorManager.Instance.Start(),
* De forma predeterminada, se ejecuta cada 12 horas o se configura mediante ErrorManager.Instance.SetTimerInterval().
* 2. En Application_Error(), cuando ocurre un error, guarde la información del error y vaya a error.aspx para mostrar el error.
* clave de cadena = ErrorManager.Instance.AddError();
* Response.Redirect("error.aspx?key=" + clave);
* 3. Obtenga y muestre el mensaje de error de la clave pasada a través de la URL en error.aspx:
* cadena err = ErrorManager.Instance.GetError(clave)
* Los primeros 19 caracteres de err son el momento en que ocurrió el error, seguido del mensaje de error.
* 4. Para detectar errores de tiempo de espera de sesión en lugar de devolver el mensaje de error de que Session[key] es nula, esta clase agrega GetSession()
* y la función SetSession para administrar la sesión de manera uniforme. En el futuro, la sesión no se puede leer directamente en aspx, pero debe leerse a través de esta clase.
*
*
*Crear logotipo:
*
*Modificar logotipo:
*Modificar descripción:
*
*Modificar logotipo:
*Modificar descripción:
*------------------------------------------------- --------------*/
usando Sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
utilizando System.Web.Security;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
usando System.Collections
/**//// <resumen>;
/// Descripción resumida del error
/// </summary>
ErrorManager de clase pública
{
sistema privado.Timers.Timer m_timer;
tabla hash privada m_htErr
/**//// <resumen>
/// Constructor privado
/// </summary>
administrador de errores privado()
{
this.m_timer = nuevo System.Timers.Timer();
this.m_timer.Enabled = falso;
this.m_timer.Interval = 12 * 60 * 60 * 1000 //Se ejecuta una vez cada 12 horas de forma predeterminada;
this.m_timer.Elapsed += nuevo System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this.m_htErr = nueva Hashtable();
}
/**//// <resumen>
/// interfaz en modo singleton
/// </summary>
Instancia de ErrorManager estática pública de solo lectura = nuevo ErrorManager()
/**//// <resumen>
/// Establece la frecuencia del temporizador en milisegundos
/// </summary>
/// <param name="Interval">Milisegundos</param>
vacío público SetTimerInterval (intervalo int)
{
this.m_timer.Interval = Intervalo;
}
/**//// <resumen>
/// Se inicia el cronómetro
/// </summary>
TimerStart vacío público()
{
this.m_timer.Enabled = verdadero;
}
/**//// <resumen>
/// El cronómetro termina
/// </summary>
TimerStop vacío público()
{
this.m_timer.Enabled = falso;
}
/**//// <resumen>
/// Se produjo un error Guarde la información del error y devuelva el ID del error para facilitar la lectura en la página.
/// </summary>
/// <returns>Devuelve el ID incorrecto</returns>
cadena pública AddError()
{
clave de cadena = Guid.NewGuid().ToString();
mensaje de cadena = System.DateTime.Now.ToString("aaaa-MM-dd HH:mm:ss")
+ HttpContext.Current.Server.GetLastError().GetBaseException().Mensaje;
this.m_htErr.Add(clave, mensaje);
HttpContext.Current.Server.ClearError()
;
}
/**//// <resumen>
/// Devuelve el mensaje de error de la clave especificada. Los primeros 19 caracteres son el momento en que ocurrió el error.
/// </summary>
/// <param name="key">la clave es un guid</param>
/// <returns>Devolver mensaje de error</returns>
cadena pública GetError (clave de cadena)
{
devuelve this.m_htErr[key].ToString();
}
/**//// <resumen>
/// Borrar periódicamente la información de error en Hashtable
/// </summary>
/// <param nombre="remitente"></param>
/// <param nombre="e"></param>
vacío privado m_timer_Elapsed (remitente del objeto, System.Timers.ElapsedEventArgs e)
{
Lista ArrayList = nueva ArrayList();
bloquear(this.m_htErr)
{
FechaHora ahora = FechaHora.Ahora;
TimeSpan ts;
foreach (clave de cadena en this.m_htErr.Keys)
{
//Los primeros 19 caracteres son la fecha en que ocurrió el error, aaaa-MM-dd HH:mm:ss
tiempo de cadena = this.m_htErr[key].ToString().Substring(0, 19);
ts = ahora - Convert.ToDateTime(hora);
if (ts.TotalMinutes > 20) //Borrar la información de error de hace 20 minutos de la tabla hash
lista.Agregar(clave);
}
foreach (clave de cadena en la lista)
{
this.m_htErr.Remove(clave);
}
}
}
Encapsulación de operaciones de sesión#región Encapsulación de operaciones de sesión
/**//// <resumen>
/// Obtener la sesión del valor clave especificado
/// </summary>
/// <param nombre="clave">Valor clave</param>
/// <returns>Valor del contenido clave</returns>
objeto público GetSession (clave de cadena)
{
objeto val = HttpContext.Current.Session[clave];
si (val == nulo)
throw new Exception("Se agotó el tiempo de espera de la página, inicie sesión nuevamente.")
;
}
/**//// <resumen>
/// Configurar sesión
/// </summary>
/// <param nombre="clave">Valor clave</param>
/// <param name="val">Contenido clave</param>
SetSession público vacío (clave de cadena, valor de objeto)
{
HttpContext.Current.Session[clave] = val;
}
#regiónfinal
}
http://www.cnblogs.com/81/archive/2006/08/16/478175.html