Dealing with exceptions thrown in Application_Start()

https://blog.richardszalay.com/2007/03/08/dealing-with-exceptions-thrown-in-application_start/

One annoying problem I‘ve noticed in the past is that if an exception is thrown in Application_Start() the application does not restart, resulting in subsequent requests going through to the application (aspx pages and other handlers) without the Application_Start() actions happening. This can be particularly annoying as the errors that result on the pages of the site do not tell you why Application_Start threw an exception to begin with.

Luckily there is a simple solution, and it involves using HttpRuntime.UnloadAppDomain. If you call UnloadAppDomain the application will reset and the next request will start it up again, causing Application_Start to occur again. This will allow you diagnose the error that is occuring in Application_Start and thus let you fix the problem.

Below is a sample Application_Start method:

void Application_Start(object sender, EventArgs e) 
{
 try
 {
  // Some important startup stuff that must happen
 }
 catch
 {
  HttpRuntime.UnloadAppDomain(); // Make sure we try to run Application_Start again next request
  throw; // Rethrow whatever was caught
 }
}

 

在application_start中添加如下代码,然后这个错误会被application_error捕获

只需要有try catch就可以,都不需要throw,application_error就会触发。 HttpRuntime.UnloadAppDomain();这个写不写好像没什么影响

try{

}

catch (Exception ex)
{
HttpRuntime.UnloadAppDomain();
LogUtil.CreateLog(LogLevel.Error, ex);
}

 https://docs.microsoft.com/en-us/dotnet/api/system.web.httpruntime.unloadappdomain?view=netframework-4.8

Terminates the current application. The application restarts the next time a request is received for it.

Remarks:

UnloadAppDomain is useful for servers that have a large number of applications that infrequently receive requests. Rather than keep application resources alive for the lifetime of the process, UnloadAppDomain allows programmatic shutdown of unused applications.

 

 

 

Dealing with exceptions thrown in Application_Start()

上一篇:An error happened during template parsing (template: "class path resource [templates/index.html]")(有效转)


下一篇:【C语言天天练(二十)】scanf函数详解