/*---------------------------------------------------------------- ----------------
* Авторское право (С)
* все права защищены.
*
* Имя файла: ErrorManager.cs.
* Описание функции: унифицированное исправление ошибок в asp.net. Чтобы соответствовать этой категории, необходимо добавить страницу отображения информации об ошибке, например error.aspx.
*
* Инструкция по использованию: 1. Запустите таймер в Application_Start() (регулярно очищайте информацию об ошибках): ErrorManager.Instance.Start(),
* По умолчанию он запускается каждые 12 часов или устанавливается с помощью ErrorManager.Instance.SetTimerInterval().
* 2. В Application_Error() при возникновении ошибки сохраните информацию об ошибке и перейдите к error.aspx, чтобы отобразить ошибку.
* строковый ключ = ErrorManager.Instance.AddError();
* Response.Redirect("error.aspx?key=" + key);
* 3. Получите и отобразите сообщение об ошибке из ключа, переданного через URL-адрес в error.aspx:
* строка err = ErrorManager.Instance.GetError(ключ)
* Первые 19 символов err — это время возникновения ошибки, за которым следует сообщение об ошибке.
* 4. Чтобы отловить ошибки тайм-аута сеанса вместо возврата сообщения об ошибке, что Session[key] имеет значение null, этот класс добавляет GetSession().
* и функция SetSession для единообразного управления сеансом. В будущем сеанс нельзя будет читать непосредственно в aspx, его необходимо читать через этот класс.
*
*
*Создать логотип:
*
*Изменить логотип:
*Изменить описание:
*
*Изменить логотип:
*Изменить описание:
*------------------------------------------------ - --------------*/
использование системы;
использование System.Data;
использование System.Configuration;
использование System.Web;
использование System.Web.Security;
использование System.Web.UI;
использование System.Web.UI.WebControls;
использование System.Web.UI.WebControls.WebParts;
использование System.Web.UI.HtmlControls;
использование System.Collections
/**//// <сводка>;
/// Краткое описание ошибки
/// </сводка>
общедоступный класс ErrorManager
{
частный System.Timers.Timer m_timer;
частная хеш-таблица m_htErr;
/**//// <сводка>
/// Частный конструктор
/// </сводка>
частныйErrorManager()
{
this.m_timer = новый System.Timers.Timer();
this.m_timer.Enabled = ложь;
this.m_timer.Interval = 12 * 60 * 60 * 1000 //По умолчанию выполняется раз в 12 часов;
this.m_timer.Elapsed += новый System.Timers.ElapsedEventHandler(m_timer_Elapsed);
this.m_htErr = новая Hashtable();
}
/**//// <сводка>
/// Интерфейс одноэлементного режима
/// </сводка>
общедоступный статический экземпляр ErrorManager только для чтения = новый ErrorManager()
/**//// <summary>;
/// Устанавливаем частоту таймера в миллисекундах
/// </сводка>
/// <param name="Interval">Миллисекунды</param>
public void SetTimerInterval (интервал int)
{
this.m_timer.Interval = Интервал;
}
/**//// <сводка>
/// Таймер запускается
/// </сводка>
общественная недействительность TimerStart()
{
this.m_timer.Enabled = правда;
}
/**//// <сводка>
/// Таймер заканчивается
/// </сводка>
публичная недействительность TimerStop()
{
this.m_timer.Enabled = ложь;
}
/**//// <сводка>
/// Произошла ошибка. Сохраните информацию об ошибке и верните идентификатор ошибки для удобства чтения на странице.
/// </сводка>
/// <returns>Вернуть неверный идентификатор</returns>
общедоступная строка AddError()
{
строковый ключ = Guid.NewGuid().ToString();
string msg = System.DateTime.Now.ToString("гггг-ММ-дд ЧЧ:мм:сс")
+ HttpContext.Current.Server.GetLastError().GetBaseException().Message;
this.m_htErr.Add(ключ, сообщение);
HttpContext.Current.Server.ClearError();
ключ возврата;
}
/**//// <сводка>
/// Возвращает сообщение об ошибке указанного ключа. Первые 19 символов — это время возникновения ошибки.
/// </сводка>
/// <param name="key">ключ – это руководство</param>
/// <returns>Вернуть сообщение об ошибке</returns>
общедоступная строка GetError (строковый ключ)
{
вернуть this.m_htErr[ключ].ToString();
}
/**//// <сводка>
/// Регулярно очищать информацию об ошибках в хэш-таблице
/// </сводка>
/// <param name="sender"></param>
/// <param name="e"></param>
Private void m_timer_Elapsed (отправитель объекта, System.Timers.ElapsedEventArgs e)
{
Список ArrayList = новый ArrayList();
блокировка (this.m_htErr)
{
ДатаВремя сейчас = ДатаВремя.Сейчас;
ТаймСпан тс;
foreach (строковый ключ в this.m_htErr.Keys)
{
//Первые 19 символов — дата возникновения ошибки, гггг-ММ-дд ЧЧ:мм:сс
строка time = this.m_htErr[key].ToString().Substring(0, 19);
ts = сейчас - Convert.ToDateTime(время);
if (ts.TotalMinutes > 20) //Удалить информацию об ошибке 20-минутной давности из хэш-таблицы
список.Добавить(ключ);
}
foreach (строковый ключ в списке)
{
this.m_htErr.Remove(ключ);
}
}
}
Инкапсуляция операций сеанса#регион Инкапсуляция операций сеанса
/**//// <сводка>
/// Получаем сессию указанного значения ключа
/// </сводка>
/// <param name="key">Значение ключа</param>
/// <returns>Значение ключевого содержимого</returns>
открытый объект GetSession (строковый ключ)
{
объект val = HttpContext.Current.Session[ключ];
если (значение == ноль)
throw new Exception("Время ожидания страницы истекло, пожалуйста, войдите снова.");
return val;
}
/**//// <сводка>
/// Настройка сеанса
/// </сводка>
/// <param name="key">Значение ключа</param>
/// <param name="val">Ключевое содержание</param>
public void SetSession (строковый ключ, значение объекта)
{
HttpContext.Current.Session[ключ] = значение;
}
#конечныйрегион
}
http://www.cnblogs.com/81/archive/2006/08/16/478175.html