/*------------------------------------------------ ----------------
* Droit d'auteur (C)
* tous droits réservés.
*
* Nom du fichier : ErrorManager.cs
* Description de la fonction : Réparation unifiée des erreurs dans asp.net Pour correspondre à cette catégorie, une page d'affichage des informations sur les erreurs doit être ajoutée, telle que error.aspx.
*
* Mode d'emploi : 1. Démarrez le minuteur dans Application_Start() (effacez régulièrement les informations d'erreur) : ErrorManager.Instance.Start(),
* Par défaut, il s'exécute toutes les 12 heures ou est défini à l'aide de ErrorManager.Instance.SetTimerInterval().
* 2. Dans Application_Error(), lorsqu'une erreur se produit, enregistrez les informations sur l'erreur et accédez à error.aspx pour afficher l'erreur.
* clé de chaîne = ErrorManager.Instance.AddError();
* Response.Redirect("error.aspx?key=" + clé);
* 3. Obtenez et affichez le message d'erreur de la clé transmise via l'URL dans error.aspx :
* chaîne err = ErrorManager.Instance.GetError(clé)
* Les 19 premiers caractères de err correspondent à l'heure à laquelle l'erreur s'est produite, suivis du message d'erreur.
* 4. Afin de détecter les erreurs de délai d'expiration de session au lieu de renvoyer le message d'erreur indiquant que Session[key] est nulle, cette classe ajoute GetSession()
* et la fonction SetSession pour gérer la session de manière uniforme. À l'avenir, la session ne pourra pas être lue directement dans aspx, mais devra être lue via cette classe.
*
*
*Créer un logo :
*
*Modifier le logo :
*Modifier la description :
*
*Modifier le logo :
*Modifier la description :
*------------------------------------------------ - ---------------*/
utiliser le système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.WebControls.WebParts ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.Collections ;
/**//// <résumé>
/// Description récapitulative de l'erreur
/// </summary>
classe publique ErrorManager
{
privé System.Timers.Timer m_timer;
table de hachage privée m_htErr;
/**//// <résumé>
/// Constructeur privé
/// </summary>
privateErrorManager()
{
this.m_timer = new System.Timers.Timer();
this.m_timer.Enabled = faux ;
this.m_timer.Interval = 12 * 60 * 60 * 1000; //Exécuté une fois toutes les 12 heures par défaut
this.m_timer.Elapsed += new System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this.m_htErr = new Hashtable();
}
/**//// <résumé>
/// Interface en mode Singleton
/// </summary>
public static readonly ErrorManager Instance = new ErrorManager();
/**//// <résumé>
/// Définir la fréquence du timer en millisecondes
/// </summary>
/// <param name="Interval">Millisecondes</param>
public void SetTimerInterval (int Intervalle)
{
this.m_timer.Interval = Intervalle ;
}
/**//// <résumé>
/// Le minuteur démarre
/// </summary>
public void TimerStart()
{
this.m_timer.Enabled = true ;
}
/**//// <résumé>
/// Le minuteur se termine
/// </summary>
public vide TimerStop()
{
this.m_timer.Enabled = faux ;
}
/**//// <résumé>
/// Une erreur s'est produite. Enregistrez les informations d'erreur et renvoyez l'ID d'erreur pour une lecture facile sur la page.
/// </summary>
/// <returns>Renvoyer le mauvais identifiant</returns>
chaîne publique AddError()
{
clé de chaîne = Guid.NewGuid().ToString();
string msg = System.DateTime.Now.ToString("aaaa-MM-jj HH:mm:ss")
+ HttpContext.Current.Server.GetLastError().GetBaseException().Message;
this.m_htErr.Add(key, msg);
HttpContext.Current.Server.ClearError()
;
}
/**//// <résumé>
/// Renvoie le message d'erreur de la clé spécifiée. Les 19 premiers caractères sont l'heure à laquelle l'erreur s'est produite.
/// </summary>
/// <param name="key">la clé est un guid</param>
/// <returns>Renvoyer un message d'erreur</returns>
chaîne publique GetError (clé de chaîne)
{
renvoie this.m_htErr[key].ToString();
}
/**//// <résumé>
/// Effacer régulièrement les informations d'erreur dans la table de hachage
/// </summary>
/// <param name="expéditeur"></param>
/// <param name="e"></param>
private void m_timer_Elapsed (expéditeur de l'objet, System.Timers.ElapsedEventArgs e)
{
Liste ArrayList = new ArrayList();
verrouiller (this.m_htErr)
{
DateTime maintenant = DateTime.Now ;
TimeSpan ts ;
foreach (clé de chaîne dans this.m_htErr.Keys)
{
//Les 19 premiers caractères sont la date à laquelle l'erreur s'est produite, aaaa-MM-jj HH:mm:ss
chaîne time = this.m_htErr[key].ToString().Substring(0, 19);
ts = maintenant - Convert.ToDateTime(time);
if (ts.TotalMinutes > 20) //Effacer les informations d'erreur il y a 20 minutes de la table de hachage
list.Add(clé);
}
foreach (clé de chaîne dans la liste)
{
this.m_htErr.Remove(clé);
}
}
}
Encapsulation des opérations de session#region Encapsulation des opérations de session
/**//// <résumé>
/// Récupère la session de la valeur clé spécifiée
/// </summary>
/// <param name="key">Valeur clé</param>
/// <returns>Valeur du contenu clé</returns>
objet public GetSession (clé de chaîne)
{
objet val = HttpContext.Current.Session[clé];
si (val == nul)
throw new Exception("La page a expiré, veuillez vous reconnecter.");
return val;
}
/**//// <résumé>
/// Configurer la session
/// </summary>
/// <param name="key">Valeur clé</param>
/// <param name="val">Contenu clé</param>
public void SetSession (clé de chaîne, valeur d'objet)
{
HttpContext.Current.Session[clé] = val;
}
#endregion
}
http://www.cnblogs.com/81/archive/2006/08/16/478175.html