为啥在 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 中调试会一直超时?的主要内容,如果未能解决你的问题,请参考以下文章

请教ThinkPHP为啥会这么容易数据库查询超时

为啥我在应用程序中收到 sqlcommand 超时?

Asp.net 形成身份验证 cookie 不遵守 IIS7 的超时

为啥我得到 slaveOkay = 0;超时 = 30000 MongoPHP

远程调试:无法连接到远程虚拟机。连接超时

调试模式超时Tomcat [关闭]