爲什麼在VS2008/Casini中開始調試時Application_Init會啓動兩次?爲什麼在VS2008/Casini中開始調試時Application_Init會觸發兩次?
是的,它發生在global.asax中。似乎相當隨機,但只發生一段時間。
爲什麼在VS2008/Casini中開始調試時Application_Init會啓動兩次?爲什麼在VS2008/Casini中開始調試時Application_Init會觸發兩次?
是的,它發生在global.asax中。似乎相當隨機,但只發生一段時間。
我假設你指的是ASP.NET MVC應用程序中的Global.asax文件。請注意,您的global.asax擴展System.Web.HttpApplication如:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
// (snip)
}
protected void Application_Init()
{
// Why is this running twice?
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
}
基本上multiple HttpApplication instances are being instantiated to serve multiple incoming HTTP requests。一旦請求完成,HttpApplication實例就會回到一個池中再次被重用,類似於數據庫連接池。
你無法預測有多少的HttpApplication實例將被創建,主要因爲它需要滿足從打你的web應用程序的HTTP請求需求ASP.NET工作進程將創造儘可能多的。你的Application_Init()會被調用兩次,因爲正在創建2個HttpApplication實例,儘管它只是運行你的網站。這可能是因爲您在HTML中引用了其他服務器端資源(JavaScript文件,CSS等)或者可能是Ajax請求。
如果你想保證代碼只運行一次,然後把它放在你的Global.asax中的Application_Start()方法。 Or use a Bootstrapper
參見[這個答案](https://stackoverflow.com/a/13169688/23118)。 – hlovdal 2017-09-19 13:07:12
你能更具體嗎?它在哪裏做到這一點?在HttpModule中,在Global.asax中? – 2010-07-22 10:45:38