Я нашел эту статью в блоге Скотта Гатриса :
Регистрация событий отключения приложений ASP.NET
Кто-то из списка рассылки недавно спросил
был ли способ выяснить
почему и когда ASP.NET перезагружается
домены приложений. В частности, он
искал точную причину
что вызвало их на его
приложение в разделе продукции
размещенная среда (это было
изменение файла web.config, глобальный .asax
изменение, изменение каталога app_code,
изменение каталога удалить,
достигнуто максимальное количество сборников,
\ bin, изменение каталога и т. д.).
Томас в моей команде классный
фрагмент кода, который он написал, который использует
некоторые изящные частные уловки отражения
захватить и записать эту информацию.
Это довольно легко повторно использовать и добавить
в любое приложение, и может быть использовано
регистрировать информацию где угодно
хочу (код ниже использует событие NT
Журнал, чтобы сохранить его - но вы могли бы так же, как
легко отправить его в базу данных или через
написать админу). Код работает
с ASP.NET V1.1 и ASP.NET
V2.0.
Просто добавьте System.Reflection и
Пространства имен System.Diagnostics для вашего
Global.asax класс / файл, а затем добавить
событие Application_End с этим
код:
public void Application_End() {
HttpRuntime runtime =
(HttpRuntime) typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime",
BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField,
null, null, null);
if (runtime == null)
return;
string shutDownMessage =
(string) runtime.GetType().InvokeMember("_shutDownMessage",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
null, runtime, null);
string shutDownStack =
(string) runtime.GetType().InvokeMember("_shutDownStack",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
null, runtime, null);
if (!EventLog.SourceExists(".NET Runtime")) {
EventLog.CreateEventSource(".NET Runtime", "Application");
}
EventLog log = new EventLog();
log.Source = ".NET Runtime";
log.WriteEntry(String.Format(
"\r\n\r\n_shutDownMessage={0}\r\n\r\n_shutDownStack={1}",
shutDownMessage, shutDownStack),
EventLogEntryType.Error);
}