【发布时间】:2013-04-02 12:13:04
【问题描述】:
我们有问题。我们将 IISExpress 8.0 用于 Asp.net WebForm 应用程序(.net 4.0)。 计算机在 Windows 7 x64 下运行。
有时 ApplicationPool 会无故重启。我知道它会在 15 次 aspx\ascx 文件更改后重新启动。但在这种情况下,它会在没有任何更改的情况下重新启动。 在 ApplicationEnd 我们找到了重新启动的原因。它是 ApplicationShutdownReason.BuildManagerChange。
在 Internet 中搜索不会提供任何有用的详细信息。大多数情况下都建议使用 IIS 而不是 IISExpress。
你知道这可能是什么原因吗?
更新:
深入研究 .Net 4 源代码给出了这次关闭的两个原因。 当有人从 Temporary Asp.net 文件夹更改 hash.web 文件时,会触发其中之一。例如 - “c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\app\a83dcad1\be4aa699\hash\hash.web”
第二个原因是 BuildManager 构建了一些对象并将 BuildResult 缓存在 HttpCache 中。然后,如果它已过期,它会检查此 BuildResult 在缓存过期时是否需要 ShutdownAppDomainOnChange。如果需要,它会触发 BuildManagerChange 关闭。
更新2
在我们的例子中,重启是由 hash.web 更改引起的。似乎 IISExpress 在没有任何源代码更改的情况下更新它,但为什么呢?
更新3 微软有一个问题 - https://connect.microsoft.com/VisualStudio/feedback/details/783440/microsoft-visualstudio-web-host-exe-touches-hash-web-and-should-not-be-running 他们说他们在 Visual Studio 2012 Update 2 中修复了它。
【问题讨论】:
-
如果您使用的是 Windows 7,为什么不使用成熟的 IIS?
-
因为在 IIS 上配置几个 web 项目并不容易。我们可以做到,但是我们需要为每个开发人员做同样的事情。因此,使用 IISExpress 的方法更容易,因为它由一个配置并由所有其他人使用。
-
根据我的经验,IIS Express 很糟糕。您提到的配置是所有开发人员都必须做的事情——没有变通办法。从长远来看,这个成本比 IisExpress 怪异的成本要小得多。
-
感谢您分享您的想法。如果我们没有找到任何可以帮助我们的东西,那么是的,我们将切换到完整的 IIS。
标签: asp.net .net iis-7 visual-studio-2012 iis-express