Ser*_*nov 6 .net asp.net iis-7 iis-express visual-studio-2012
我们出现了问题.我们正在使用IISExpress 8.0 for Asp.net WebForm应用程序(.net 4.0).Comupter在Windows 7 x64下运行.
有时没有任何原因ApplicationPool重新启动.我知道它将在15个aspx\ascx文件更改后重新启动.但在这种情况下,它会重新启动而不做任何更改.在ApplicationEnd上,我们找到了重启的原因.这是ApplicationShutdownReason.BuildManagerChange.
在互联网上搜索不会提供任何有用的细节.大多数人都建议使用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在HttpCache中构建了一些对象并缓存了BuildResult.然后,如果它已过期,它会检查此BuildResult是否在缓存过期时需要ShutdownAppDomainOnChange.如果它需要它,那么它会触发BuildManagerChange shutdown.
UPDATE2
在我们的例子中,重启是由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中修复了它.
这不是一个完整的答案,所以你可以从中获得任何好处。
似乎发生了两件事:hash.web更改可能是因为 IIS 使用临时位置来存储您构建的应用程序 DLL。当此文件发生更改时,IIS 会了解到您构建了应用程序的新版本,并且需要重新启动它;这可以解释应用程序池重置。
对于缓存过期,IIS 似乎正在尝试卸载并重新加载不同应用程序域中的某些内容。一旦加载了应用程序域(我认为),就无法(在.NET中)卸载程序集,因此这是实现此目的的“通常”方法。
或许。
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |