我的开发环境存在问题,对缓存应用程序块的 CacheFactory 的任何调用都会导致 IIS 崩溃。我创建了一个非常简单的 Web 应用程序,每次尝试运行它都会导致 IIS 崩溃,但该应用程序在 Visual Studio.NET Web 服务器下运行良好。
以下代码是导致应用程序在 IIS 下运行时崩溃的原因:
protected void Page_Load(object sender, EventArgs e)
{
try
{
ICacheManager cm = CacheFactory.GetCacheManager("foo");
Response.Write(cm.GetHashCode());
}
catch(Exception ex)
{
Response.Write(Server.HtmlEncode(ex.ToString()));
}
}
我在这里有点抓稻草,但有没有人看到过类似的行为?有一段时间我看到“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。” 错误,但现在我只是崩溃了。在我上面的代码示例中,当我在 IIS 下运行时,永远无法捕获问题,因为 w3wp.exe 进程失败了。发生这种情况时,我在事件日志中得到以下条目:
为应用程序池“WebApplication1”提供服务的进程与 Windows 进程激活服务发生了致命的通信错误。进程 ID 为“1944”。数据字段包含错误号。
我已经尝试重新安装企业库并重新运行 aspnet_regiis.exe 无济于事。我还尝试删除 Web 服务器角色并重新安装它,但这也不起作用。
关于我的开发环境的一些说明:
- 在 VirtualBox 4.0.4 下的 Windows Server 2008 R2 x64 Web 版上运行 VS.NET 2010 SP1 Beta
- 使用企业库 5.0
- 直到最近,这个开发服务器上的一切都运行良好。
- 此时,已使用 bcdedit.exe 关闭数据执行保护
编辑
我已将此问题缩小到 .NET 4.0 Framework 问题。当我针对 3.5 框架构建 Web 应用程序时,它按预期工作,但是当我针对 4.0 框架构建时,IIS 在运行 Web 应用程序时崩溃。