读取 cookie 时 IIS7 应用程序池崩溃

Posted

技术标签:

【中文标题】读取 cookie 时 IIS7 应用程序池崩溃【英文标题】:IIS7 Application Pool crash when reading cookies 【发布时间】:2012-01-22 01:06:22 【问题描述】:

这是一个真正的挑战: 我已经在我的电脑上设置了 IIS7.5 并开始开发一个网站。每天晚上我都在我的网络服务器上备份它,赢得 2008r2 sp1(所有更新)。它完美无瑕。

然而,我在跨应用程序池共享 cookie 时遇到了一个大问题。 www.example.com 设置为 127.0.0.1,因此我可以在本地测试该网站。它创建了 cookie 但是当我删除 HOSTS 记录(指向 Web 服务器)时 - Web 服务器上的应用程序池崩溃了。它每次都会发生,并且可能需要对 sessionID cookie 做一些事情,因为没有 cookie 它不会崩溃!

日志文件是:

Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: nlssorting.dll, version: 4.0.30319.239, time stamp: 0x4e182039
Exception code: 0xc00000fd
Fault offset: 0x0000000000001d7d
Faulting process id: 0x9f8
Faulting application start time: 0x01ccbbd76b7a443c
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\nlssorting.dll
Report Id: a9cfd0cf-27ca-11e1-bced-00215e5304da

发生了什么事?

【问题讨论】:

你见过这个连接错误吗? connect.microsoft.com/VisualStudio/feedback/details/665157/… 是的,那里没有真正的信息,但如果它是一个错误,那么它不可能尚未修复......我认为(2011 年 4 月) 我会提交另一个文件或添加它,所以他们知道这是一个真正的问题。 问题的线索出现在异常代码中:0xc00000fd - 那是那里发生的堆栈溢出。开始对此进行故障排除的唯一方法是使用 DebugDiag 或 ADPlus 来捕获池的故障转储。完成后,您需要在 WinDbg + SOS 中加载转储并开始分析。您应该看看 Tess Ferrandez 的调试实验室,这将帮助您入门:blogs.msdn.com/b/tess/archive/2008/02/04/…。 应用池回收后网站还能用吗?还是在您更改 HOSTS 设置以访问服务器后,它是否会在您点击的每个页面上反复崩溃? 【参考方案1】:

ASP.NET auth cookie 使用 web.config 中的 machineKey 设置进行加密和解密。如果你没有它,它会在每次应用启动时自动生成。最好将其设置为固定值,以避免 cookie 在应用重新启动之间失效。

我不能确定,但​​可能是 asp.net 会话 cookie 也依赖于这个加密密钥。我很确定 viewstate 也在使用它(这就是为什么您在应用因不活动而关闭后启动回发时看到无效视图状态错误的原因)。

所以,尝试设置机器密钥,看看它仍然会发生。您可以使用 IIS 生成一个,它会将其插入到 web.config 中的正确位置。

【讨论】:

以上是关于读取 cookie 时 IIS7 应用程序池崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iis7 无法验证对路径的访问

两阶段身份验证 IIS7

IIS7 中的身份池

IIS7.5 用 IIS AppPool应用程序池名 做账号 将各站点权限分开

解决IIS7IIS7.5 应用程序池回收假死的方法

解决IIS7IIS7.5 应用程序池回收假死的方法