Без доступа к журналам событий (потому что вы находитесь в среде общего хостинга) большая часть информации, которую вы собираетесь получить, - это событие 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 с открытым исходным кодом?).
person
Kev
schedule
26.03.2011