6

我们出现了问题。我们将 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 在没有任何源代码更改的情况下对其进行了更新,但为什么呢?

UPDATE3 微软有一个问题 - https://connect.microsoft.com/VisualStudio/feedback/details/783440/microsoft-visualstudio-web-host-exe-touches-hash-web-and-should-not-be-运行 他们说他们在 Visual Studio 2012 Update 2 中修复了它。

4

1 回答 1

2

这不是一个完整的答案,所以你可以从中获得任何好处。

似乎发生了两件事:hash.web更改可能是因为 IIS 使用临时位置来存储您构建的应用程序 DLL。当这个文件发生变化时,IIS 知道你构建了一个新版本的应用程序,需要重新启动它;这可以解释应用程序池重置。

对于缓存过期,似乎 IIS 正在尝试在不同的应用程序域中卸载和重新加载某些内容。一旦加载了应用程序域(我认为),就无法(在.NET中)卸载程序集,因此这是实现此目的的“常用”方法。

也许。

于 2013-04-15T13:32:27.000 回答