Ce putem face? O solutie este ca in Global.asax.cs, in metoda Application_End sa obtinem date despre motivul pentru care aplicatie se termina si sa scriem aceste date in trace sau sa le logam undeva. Aceasta metoda o sa fie apelata de fiecare data cand aplicatia este oprita. Din pacate informatiile pentru care aplicatia este oprita se pot obtine doar prin intermedul reflection. Nu avem o alta modalitate sa obtinem aceste date. Daca aplicatia primeste un semnal din exterior ca trebuie sa se opreasca metoda Application_Error nu o sa fie apelata.
Mai jos gasiti un exemplu de implementare a metodei 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 message = (string)runtime.GetType().InvokeMember("_shutDownMessage",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
null, runtime, null);
string stackTrace = (string)runtime.GetType().InvokeMember("_shutDownStack",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
null, runtime, null);
Trace.WriteLine(string.Format("Application_End: {0} {1}", message, stackTrace));
}
Enjoy!
0 comments:
Post a Comment