/*------------------------------------------------ ----------------
* Direitos autorais (C)
*todos os direitos reservados.
*
* Nome do arquivo: ErrorManager.cs
* Descrição da função: Reparo unificado de erros em asp.net Para corresponder a esta categoria, uma página de exibição de informações de erro precisa ser adicionada, como error.aspx.
*
* Instruções de uso: 1. Inicie o cronômetro em Application_Start() (limpe as informações de erro regularmente): ErrorManager.Instance.Start(),
* Por padrão, ele é executado a cada 12 horas ou é definido usando ErrorManager.Instance.SetTimerInterval().
* 2. Em Application_Error(), quando ocorrer um erro, salve as informações do erro e vá para error.aspx para exibir o erro.
* string chave = ErrorManager.Instance.AddError();
* Response.Redirect("error.aspx?key=" + chave);
* 3. Obtenha e exiba a mensagem de erro da chave passada pela URL em error.aspx:
* string err = ErrorManager.Instance.GetError(chave)
* Os primeiros 19 caracteres em err são a hora em que o erro ocorreu, seguidos pela mensagem de erro.
* 4. Para capturar erros de tempo limite da sessão em vez de retornar a mensagem de erro de que Session[key] é nula, esta classe adiciona GetSession()
* e função SetSession para gerenciar Session uniformemente. No futuro, Session não pode ser lida diretamente em aspx, mas deve ser lida através desta classe.
*
*
*Criar logotipo:
*
*Modificar logotipo:
*Modificar descrição:
*
*Modificar logotipo:
*Modificar descrição:
*------------------------------------------------ - ----------------*/
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
System.Collections
;
/// Descrição resumida do erro
/// </sumário>
classe pública ErrorManager
{
privado System.Timers.Timer m_timer;
tabela de hash privada m_htErr;
/**//// <resumo>
/// Construtor privado
/// </sumário>
privateErrorManager()
{
this.m_timer = novo System.Timers.Timer();
this.m_timer.Enabled = falso;
this.m_timer.Interval = 12 * 60 * 60 * 1000 //Executado uma vez a cada 12 horas por padrão;
this.m_timer.Elapsed += novo System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this.m_htErr = new Hashtable();
}
/**//// <resumo>
/// Interface de modo Singleton
/// </sumário>
public static readonly ErrorManager Instance = new ErrorManager()
;
/// Define a frequência do timer em milissegundos
/// </sumário>
/// <param name="Interval">Milissegundos</param>
público void SetTimerInterval (intervalo interno)
{
this.m_timer.Interval = Intervalo;
}
/**//// <resumo>
/// O cronômetro inicia
/// </sumário>
public void TimerStart()
{
this.m_timer.Enabled=true;
}
/**//// <resumo>
/// O cronômetro termina
/// </sumário>
público vazio TimerStop()
{
this.m_timer.Enabled = falso;
}
/**//// <resumo>
/// Ocorreu um erro Salve as informações do erro e retorne o ID do erro para facilitar a leitura na página.
/// </sumário>
/// <returns>Retorna o id errado</returns>
string pública AddError()
{
string chave = Guid.NewGuid().ToString();
string msg = System.DateTime.Now.ToString("aaaa-MM-dd HH:mm:ss")
+ HttpContext.Current.Server.GetLastError().GetBaseException().Message;
this.m_htErr.Add(chave, mensagem);
HttpContext.Current.Server.ClearError()
;
}
/**//// <resumo>
/// Retorna a mensagem de erro da chave especificada. Os primeiros 19 caracteres são a hora em que o erro ocorreu.
/// </sumário>
/// <param name="key">chave é um guia</param>
/// <returns>Retornar mensagem de erro</returns>
string pública GetError(chave de string)
{
retornar this.m_htErr[key].ToString();
}
/**//// <resumo>
/// Limpe regularmente as informações de erro no Hashtable
/// </sumário>
/// <param name="sender"></param>
/// <param name="e"></param>
private void m_timer_Elapsed (remetente do objeto, System.Timers.ElapsedEventArgs e)
{
ListaArrayList = new ArrayList();
bloquear(this.m_htErr)
{
DateTime agora = DateTime.Agora;
TimeSpan ts;
foreach (chave de string em this.m_htErr.Keys)
{
//Os primeiros 19 caracteres são a data em que o erro ocorreu, aaaa-MM-dd HH:mm:ss
string time = this.m_htErr[key].ToString().Substring(0, 19);
ts = agora - Convert.ToDateTime(hora);
if (ts.TotalMinutes > 20) //Limpa as informações de erro de 20 minutos atrás da tabela hash
lista.Adicionar(chave);
}
foreach (chave de string na lista)
{
this.m_htErr.Remove(chave);
}
}
}
Encapsulamento de operações de sessão#region Encapsulamento de operações de sessão
/**//// <resumo>
/// Obtém a sessão do valor-chave especificado
/// </sumário>
/// <param name="key">Valor chave</param>
/// <returns>Valor do conteúdo chave</returns>
objeto público GetSession (chave de string)
{
objeto val = HttpContext.Current.Session[chave];
se (val == nulo)
throw new Exception("Tempo limite da página expirou, faça login novamente.");
return val;
}
/**//// <resumo>
/// Configurar sessão
/// </sumário>
/// <param name="key">Valor chave</param>
/// <param name="val">Conteúdo principal</param>
public void SetSession(chave de string, objeto val)
{
HttpContext.Current.Session[chave] = val;
}
#endregion
}
http://www.cnblogs.com/81/archive/2006/08/16/478175.html