【发布时间】:2010-08-19 05:59:07
【问题描述】:
ASP .NET 应用程序启动多少次?
我想为每个 AppDomain 运行一次(特别是 RegisterRoutes)。如果我将要执行的代码放在 Application_Start 中的 global.asax 中,一切都很好(或者看起来如此),并且代码似乎只执行一次。
但如果我在 web.config 中注册了一个自定义 HTTP 模块,它会执行以下操作:
public class SomeHttpModule:IHttpModule
{
public void Init(HttpApplication context)
{
new SomeRunner().Run();
}
public void Dispose()
{
}
}
public class SomeRunner
{
private static object syncLock = new object();
private static bool hasRun;
public void Run()
{
lock(syncLock)
{
if (!hasRun)
{
hasRun = true;
RegisterRoutes();
}
}
}
public void RegisterRoutes()
{
// Register MVC Routes
}
}
当我在 Visual Studio 中点击“开始”时,我的调试器在 Run 方法的第一行的断点处停止……但是,如果我检查 RouteTable.Routes 集合,你会发现……MVC 路由已经已注册(意味着 RegisterRoutes 必须已被调用)...即使 hasRun 为假!
这是在调试 IIS 网站的 Visual Studio 中运行的某种奇怪现象吗?我知道 IIS 可以在一个 AppDomain 中托管两个 HttpApplications,并且 SomeHttpModule 在同一个 AppDomain 中会被初始化两次……对吗?但是我的静态布尔 hasRun 怎么可能仍然是假的???
谢谢。
【问题讨论】:
-
您也有在
Application_Start中给RegisterRoutes()打电话吗?
标签: c# asp.net-mvc