2009-09-14 67 views
50

当我在我的Windows 7 IIS7机器上调试,我调试过程中出现此错误:为什么调试在IIS7中保持超时?

,目前正在调试

Web服务器进程已被IIS终止。 这可以通过在IIS中配置 应用程序池设置来避免。有关更多详细信息,请参阅 帮助。

我在做什么错?

回答

92

Dead image link

当你调试,直到你完成单步执行代码IIS不会服务于任何其他请求。这包括IIS发送给自己的“ping”请求。由于IIS本身没有收到任何回应,因此它决定自行关闭,这会立即终止您的调试。

解决的办法是将应用程序池设置中的Ping最大响应时间从默认值90秒增加到。将它设置得足够高,这会给你足够的时间来调试你的代码(比如300秒)。

微软有一个长篇大论的写作here,或者你可以看看漂亮的图片。

-

编辑:其他人建议将“启用Ping”设置为false。有几个原因让我更喜欢保持它的位置,只是间隔较长,但最重要的是,您将(很可能)在生产环境中启用了工作者处理ping命令,并且您应该努力在配置下进行开发和调试尽可能接近生产。如果您没有在生产环境中启用ping,那么通过所有方法也可以在本地禁用它。

+0

为什么不使用上面的设置来完全禁用ping? –

+2

@保罗贝茨:因为你想尽可能地反映生产。当你真正需要的是增加ping时间间隔时,完全禁用ping有点Draconian。 – Portman

+0

有人能告诉我这个问题是否也适用于未被调试的长时间运行的脚本,或者运行长时间运行的脚本的线程/进程是否仍然能够响应ping? – Rich

2

IIS有一个健康检查功能,定期检查,看是否IIS工作进程被挂起或以其他方式unusuable。如果工作进程在调试器中停止,则从IIS的角度来看,它看起来不健康,并且IIS会杀死它并且启动一个新进程。

要更改此行为(在开发工作站上 - 不想在生产中禁用此功能),请转到IIS管理工具,选择左窗格中的“应用程序池”节点,然后右键单击该应用程序您的应用所在的应用池,然后选择“高级设置”。从那里,在“过程模型”部分中,将“启用Ping”设置为False。您可能还想要将空闲超时设置为非常大的数字。

有关此问题和截图的更多讨论,请参见this IIS.NET article。有关如何通过管理工具外的代码/脚本设置这些设置,请参阅this TechNet article

0

如果你有微软公司的scom运行和配置在你工作的地方(假设这不是一个有趣的项目),你可以为它创建一个管理包或知道某人是谁,这可以帮助你查明什么是造成这个问题。我意识到这是一个很长的过程,但如果这样做描述了你的场景,那么如果找不到其他解决方案,我会这样做。