【问题标题】:ASP.MVC3: are there 3 MvcApplication instances when debugging?ASP.MVC3:调试时有3个MvcApplication实例吗?
【发布时间】:2012-04-21 12:07:30
【问题描述】:

MVC 3 Web 应用程序中的 MvcApplication 是单例吗?为什么我找到了 3 个实例?

我的步骤:(VS2010 SP1 + ASP.NET MVC 3 工具更新)

  1. 创建默认 Internet MVC 3 应用程序(带有帐户示例)
  2. 在 global.asax 中添加 MvcApplication() 构造函数,并在其中设置断点
  3. 按 F5 进行调试

我发现构造函数被调用了 3 次!

最好的问候,

扎克@Shine

===编辑===

更正:

为 1 个网络应用找到 2 个实例,而不是 3 个。 经过仔细检查,我发现我的解决方案包含 2 个 Web 应用程序,删除其中一个后,我可以找到左侧应用程序的 2 个实例。

这是日志(数字是 MvcApplication 实例的哈希码)

MvcApplication(): 41516761
Application_Start(): 41516761
 MvcApplication(): 56552081
 Application_AuthenticateRequest(): 56552081
 Application_AuthenticateRequest(): 56552081
 Application_AuthenticateRequest(): 56552081
 MvcApplication_Disposed(): 56552081
Application_End(): 41516761

如图所示,一个实例用于处理开始、结束事件,另一个用于处理请求。

【问题讨论】:

    标签: asp.net asp.net-mvc-3


    【解决方案1】:

    MvcApplication 从下面的普通 asp.net 继承自 HttpApplication 是了解 asp.net 管道的一个很好的链接。我已经从文章中复制了相关部分。

    简而言之 - 没有 MvcApplication 不是单例的,但每个请求只存在一个。

    http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp

    每个请求都被路由到一个 HttpApplication 对象。这 HttpApplicationFactory 类创建一个 HttpApplication 对象池 根据应用程序的负载为您的 ASP.NET 应用程序 并为每个传入请求分发参考。的大小 池仅限于 MaxWorkerThreads 设置的设置 machine.config 的 ProcessModel Key,默认为 20。 不过从较小的数字开始;通常是一个,然后它会增长 因为需要处理多个同时的请求。游泳池是 受到监控,因此在负载下它可能会增长到最大实例数, 后来随着负载的下降,它会缩小到一个较小的数字。 HttpApplication 是您特定 Web 的外部容器 应用程序,它映射到 Global.asax 中定义的类。 这是您实际看到的 HTTP 运行时的第一个入口点 定期在您的应用程序中。如果您查看 Global.asax (或类后面的代码)你会发现这个类派生 直接来自HttpApplication:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多