Без доступа к журналам событий (потому что вы находитесь в среде общего хостинга) большая часть информации, которую вы собираетесь получить, - это событие Application_End
и запрос значения HttpRuntime
(посредством отражения)одного или двух закрытых участников, которые, к сожалению, не доступны публично.
Для этого добавьте следующий код в ваше Application_End
событие:
BindingFlags staticFlags =
BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField;
BindingFlags instanceFlags =
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField;
HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime)
.InvokeMember("_theRuntime", staticFlags, null, null, null);
if(runtime != null)
{
string shutDownMessage = (string)runtime.GetType()
.InvokeMember("_shutDownMessage", instanceFlags, null, runtime, null);
string shutDownStack = (string)runtime.GetType()
.InvokeMember("_shutDownStack", instanceFlags, null, runtime, null);
// Log shutDownMessage & shutDownStack somewhere
}
Если я завершу работу или перезапущу приложение моего приложенияпул Я вижу следующее:
HostingEnvironment initiated shutdown
HostingEnvironment caused shutdown -
at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Environment.get_StackTrace()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal()
at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand()
at System.Web.Hosting.PipelineRuntime.StopProcessing()
Это, вероятно, примерно так же хорошо, как он получает.
Обновление:
Я не мог вспомнить, гдеЯ нашел этот код, но Дрю услужливо напомнил мне, что это был пост в блоге Скотта Гатри.
Существуют и другие частные участники, которые могут быть полезны, например:
private ApplicationShutdownReason _shutdownReason;
Вы можете проверитьполя в .NET Reflector (если у вас все еще есть копия, которая не подвергается временной бомбардировке) или одна из альтернатив ( Альтернативы с открытым исходным кодом для Reflector? ).