gpt4 book ai didi

c# - ASP .NET 应用程序启动了多少次

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:27 25 4
gpt4 key购买 nike

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 中点击“go”时,我的调试器在 Run 方法的第一行我的断点处停止......但是你瞧,如果我检查 RouteTable.Routes 集合......MVC 路由已经已注册(意味着 RegisterRoutes 必须已被调用)...即使 hasRun 为 false!

这是在调试 IIS 网站的 Visual Studio 中运行的某种奇怪行为吗?我知道 IIS 可以在一个 AppDomain 中托管两个 HttpApplications,并且会让 SomeHttpModule 在同一个 AppDomain 中获得 Init 两次......对吗?但是我的 static bool hasRun 怎么可能仍然是假的???

谢谢。

最佳答案

Web 应用程序可以启动多次。只要 IIS 认为它没有被使用,应用程序就可以关闭,当下一个请求到来时,应用程序将再次启动。

此外,应用程序可能被设置为每天回收,在这种情况下它会每天至少启动一次。

我不确定为什么在调试时应用程序会启动两次,但这可能与调试器附加到进程的方式有关。

静态变量不能从应用程序的一个实例到下一个实例生存的原因是它们是独立的实例。当应用程序再次启动时,它从它自己的一组变量开始。它从一个全新的虚拟地址空间开始,因此之前的实例没有留下任何东西。

关于c# - ASP .NET 应用程序启动了多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3519108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com