/*------------------------------------------------ ----------------
* Urheberrecht (C)
*Alle Rechte vorbehalten.
*
* Dateiname: ErrorManager.cs
* Funktionsbeschreibung: Einheitliche Fehlerreparatur in asp.net. Um dieser Kategorie zu entsprechen, muss eine Seite zur Anzeige von Fehlerinformationen hinzugefügt werden, z. B. error.aspx
*
* Gebrauchsanweisung: 1. Starten Sie den Timer in Application_Start() (Fehlerinformationen regelmäßig löschen): ErrorManager.Instance.Start(),
* Standardmäßig wird es alle 12 Stunden ausgeführt oder wird mit ErrorManager.Instance.SetTimerInterval() festgelegt.
* 2. Wenn in Application_Error() ein Fehler auftritt, speichern Sie die Fehlerinformationen und gehen Sie zu error.aspx, um den Fehler anzuzeigen.
* string key = ErrorManager.Instance.AddError();
* Response.Redirect("error.aspx?key=" + key);
* 3. Rufen Sie die Fehlermeldung aus dem über die URL in error.aspx übergebenen Schlüssel ab und zeigen Sie sie an:
* string err = ErrorManager.Instance.GetError(key)
* Die ersten 19 Zeichen in err geben den Zeitpunkt an, zu dem der Fehler aufgetreten ist, gefolgt von der Fehlermeldung.
* 4. Um Session-Timeout-Fehler abzufangen, anstatt die Fehlermeldung zurückzugeben, dass Session[key] null ist, fügt diese Klasse GetSession() hinzu.
* und SetSession-Funktion zur einheitlichen Verwaltung von Sessions. In Zukunft kann Session nicht mehr direkt in ASPX gelesen werden, sondern muss über diese Klasse gelesen werden.
*
*
*Logo erstellen:
*
*Logo ändern:
*Beschreibung ändern:
*
*Logo ändern:
*Beschreibung ändern:
*------------------------------------------------ - --------------*/
Verwenden des Systems;
Verwenden von System.Data;
Verwenden von System.Configuration;
mit System.Web;
mit System.Web.Security;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.WebControls.WebParts;
mit System.Web.UI.HtmlControls;
using System.Collections;
/**//// <summary>
/// Zusammenfassende Beschreibung für Fehler
/// </summary>
öffentliche Klasse ErrorManager
{
private System.Timers.Timer m_timer;
private Hashtable m_htErr;
/**//// <summary>
/// Privater Konstruktor
/// </summary>
privateErrorManager()
{
this.m_timer = new System.Timers.Timer();
this.m_timer.Enabled = false;
this.m_timer.Interval = 12 * 60 * 60 * 1000; //Wird standardmäßig alle 12 Stunden ausgeführt
this.m_timer.Elapsed += new System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this.m_htErr = new Hashtable();
}
/**//// <Zusammenfassung>
/// Singleton-Modus-Schnittstelle
/// </summary>
public static readonly ErrorManager Instance = new ErrorManager();
/**//// <summary>
/// Stellen Sie die Häufigkeit des Timers in Millisekunden ein
/// </summary>
/// <param name="Interval">Millisekunden</param>
public void SetTimerInterval(int Interval)
{
this.m_timer.Interval = Intervall;
}
/**//// <Zusammenfassung>
/// Timer startet
/// </summary>
public void TimerStart()
{
this.m_timer.Enabled = true;
}
/**//// <Zusammenfassung>
/// Timer endet
/// </summary>
public void TimerStop()
{
this.m_timer.Enabled = false;
}
/**//// <Zusammenfassung>
/// Ein Fehler ist aufgetreten. Speichern Sie die Fehlerinformationen und geben Sie die Fehler-ID zurück, damit sie auf der Seite leichter gelesen werden kann.
/// </summary>
/// <returns>Die falsche ID zurückgeben</returns>
öffentliche Zeichenfolge AddError()
{
string key = Guid.NewGuid().ToString();
string msg = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ HttpContext.Current.Server.GetLastError().GetBaseException().Message;
this.m_htErr.Add(key, msg);
HttpContext.Current.Server.ClearError()
;
}
/**//// <Zusammenfassung>
/// Gibt die Fehlermeldung des angegebenen Schlüssels zurück. Die ersten 19 Zeichen geben den Zeitpunkt an, zu dem der Fehler aufgetreten ist.
/// </summary>
/// <param name="key">key ist eine Guid</param>
/// <returns>Fehlermeldung zurückgeben</returns>
öffentlicher String GetError(string key)
{
return this.m_htErr[key].ToString();
}
/**//// <Zusammenfassung>
/// Fehlerinformationen regelmäßig in der Hashtabelle löschen
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void m_timer_Elapsed(Objektsender, System.Timers.ElapsedEventArgs e)
{
ArrayList list = new ArrayList();
lock(this.m_htErr)
{
DateTime now = DateTime.Now;
TimeSpan ts;
foreach (String-Schlüssel in this.m_htErr.Keys)
{
//Die ersten 19 Zeichen geben das Datum an, an dem der Fehler aufgetreten ist, jjjj-MM-tt HH:mm:ss
string time = this.m_htErr[key].ToString().Substring(0, 19);
ts = now - Convert.ToDateTime(time);
if (ts.TotalMinutes > 20) //Fehlerinformationen vor 20 Minuten aus der Hashtabelle löschen
list.Add(key);
}
foreach (String-Schlüssel in der Liste)
{
this.m_htErr.Remove(key);
}
}
}
Kapselung von Sitzungsoperationen#region Kapselung von Sitzungsoperationen
/**//// <Zusammenfassung>
/// Holen Sie sich die Sitzung des angegebenen Schlüsselwerts
/// </summary>
/// <param name="key">Schlüsselwert</param>
/// <returns>Schlüsselinhaltswert</returns>
öffentliches Objekt GetSession(string key)
{
object val = HttpContext.Current.Session[key];
if (val == null)
throw new Exception("Zeitüberschreitung der Seite, bitte melden Sie sich erneut an.");
return val;
}
/**//// <Zusammenfassung>
/// Sitzung einrichten
/// </summary>
/// <param name="key">Schlüsselwert</param>
/// <param name="val">Schlüsselinhalt</param>
public void SetSession(string key, object val)
{
HttpContext.Current.Session[key] = val;
}
#endregion
}
http://www.cnblogs.com/81/archive/2006/08/16/478175.html