为啥在 IIS7 中调试会一直超时?
Posted
技术标签:
【中文标题】为啥在 IIS7 中调试会一直超时?【英文标题】:Why does debugging keep timing out in IIS7?为什么在 IIS7 中调试会一直超时? 【发布时间】:2010-11-28 03:20:56 【问题描述】:当我在我的 Windows 7 IIS7 机器上调试时,我在调试过程中收到此错误:
正在运行的 Web 服务器进程 debugged 已被 IIS 终止。 这可以通过配置来避免 IIS 中的应用程序池设置。看 帮助了解更多详情。
我做错了什么?
【问题讨论】:
【参考方案1】:在您调试时,IIS 不会为任何其他请求提供服务,直到您完成单步调试代码。这包括 IIS 发送给自身的“ping”请求。由于 IIS 没有收到自己的回复,它决定关闭自己,这会立即终止您的调试。
解决方案是将应用程序池设置中的 Ping 最大响应时间从其默认值 90 秒增加。将其设置为足够高的值,以便您有足够的时间来调试代码(例如 300 秒)。
微软有一篇冗长的文章here。
编辑:其他人建议将“Ping Enabled”设置为 false。有几个原因我更喜欢保留它,只是间隔更大,但最重要的是您将(很可能)在生产中启用工作进程处理 ping,并且您应该努力在配置下开发和调试即尽可能接近生产。如果您没有在生产环境中启用 ping,那么也一定要在本地禁用它。
【讨论】:
你为什么不直接使用它上面的设置来完全禁用 ping? @Paul Betts:因为您希望尽可能地反映生产。当您真正需要的是增加 ping 间隔时,完全禁用 ping 有点苛刻。 谁能告诉我这个问题是否也适用于未调试的长时间运行的脚本,或者运行长时间运行的脚本的线程/进程是否仍能响应 ping? @Rich 这仅适用于调试,当调试器正在等待人类单步执行代码时。【参考方案2】:如果您运行并配置了 microsoft 的 scom(假设这不是一个有趣的项目),并且您能够为其创建一个管理包或认识某个人,这可能有助于您查明是什么原因造成的问题。我意识到这是一个长镜头,但如果这确实描述了您的场景,那么如果没有找到其他解决方案,我会这样做。
【讨论】:
【参考方案3】:IIS 具有健康检查功能,可定期检查 IIS 工作进程是否挂起或无法使用。如果工作进程在调试器中停止,从 IIS 的角度来看,它看起来不健康,IIS 会杀死它并启动一个新进程。
要更改此行为(在您的开发工作站上——不想在生产中禁用它!)转到 IIS 管理工具,在左窗格中选择应用程序池节点,然后右键单击应用程序池您的应用程序所在的位置,然后选择“高级设置”。从那里,在“流程模型”部分中,将“Ping Enabled”设置为 False。您可能还希望将空闲超时设置为一个非常大的数字。
有关此问题的更多讨论和屏幕截图,请参阅 this IIS.NET article。请参阅this TechNet article,了解如何通过管理工具之外的代码/脚本设置这些设置。
【讨论】:
如果我将 Idle Timeout 设置为 0 会发生什么?这是否被视为无限超时?【参考方案4】:http://weblogs.asp.net/soever/archive/2009/06/18/debugging-sharepoint-asp-net-code-smart-key-codes-disable-timeout.aspx
您的应用程序池 -> 高级设置 -> Ping 启用为 False
【讨论】:
以上是关于为啥在 IIS7 中调试会一直超时?的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net 形成身份验证 cookie 不遵守 IIS7 的超时