为什么debugging在IIS7中保持超时?

当我在Windows 7 IIS7机器上进行debugging时,在debugging期间出现此错误:

正在debugging的Web服务器进程已被IIS终止。 这可以通过在IIS中configuration应用程序池设置来避免。 请参阅帮助了解更多详情。

我究竟做错了什么?

死图像链接

当您正在debugging时,IIS将不会服务任何其他请求,直到您完成您的代码。 这包括IIS发送给自己的“ping”请求。 由于IIS本身没有收到任何回应,它决定closures自己,这会立即终止您的debugging。

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

微软在这里写了一篇长篇大论,或者你可以看看漂亮的图片。

编辑:其他人build议将“启用Ping”设置为false。 有几个原因,我宁愿保留它,只是间隔较长,但最重要的是,你将(很可能)有工人处理ping生产启用,你应该努力开发和debugging下一个configuration尽可能接近生产。 如果您没有在生产环境中启用ping,那么通过所有方法也可以在本地禁用它。

IIS具有健康检查function,该function会定期检查IIS工作进程是否挂起或不可用。 如果一个工作进程在debugging器中停止,从IIS的angular度来看,它看起来不健康,IIS会杀死它并激活一个新的进程。

要改变这种行为(在您的开发工作站上,不要在生产环境中禁用此function),请转至IISpipe理工具,在左窗格中select“应用程序池”节点,然后右键单击应用程序池居住,并select“高级设置”。 从那里,在“stream程模型”部分,将“启用Ping”设置为False。 您可能还希望将空闲超时设置为非常大的数字。

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

如果你有微软公司的scom运行和configuration在你工作的地方(假设这不是一个有趣的项目),你可以为它创build一个pipe理包,或者知道某个人是谁,这可以帮助你找出造成问题的原因。 我意识到这是一个很长的一步,但如果这样做描述你的情况下,我会做,如果没有其他解决scheme被发现。