VS2010错误:无法在Web服务器上启动调试

17

在Visual Studio 2010中,我遇到了"无法在Web服务器上启动调试"的错误提示。我点击了帮助按钮,并按照相关建议操作,但没有成功。

当我将新创建的本地ASP.Net项目修改为使用IIS而不是Cassini(调试时使用),就会出现这种情况。它提示我在web.config中设置debug="true",然后立即弹出错误。事件查看器中没有显示任何信息。

我可以附加到w3wp进行调试,虽然可行,但没有F5方便。

我在同一台PC上使用VS2008也出现了类似问题。以前两个版本都可以正常调试。

我已经重新注册Framework 4 (aspnet_regiis -i)。我运行了VS2010修复程序(这是RTM版本)。我的操作系统是Windows Server 2008 R2 x64。

我安装了Resharper V5。

一定有某些配置设置或注册表值在修复时没有被重置,从而导致了这个问题。

如果您有任何想法,请告诉我,谢谢!


IIS中是否启用了HTTP Keep Alives?这在之前曾给我带来过问题。 - JasonS
是的,它们已经启用了。我仍然遇到这个问题。它在VS2010和VS2008中都会发生。 - GarDavis
1
我也卡在这里了。唯一的区别是没有ReSharper(尚未安装),也没有Win 2008(我用的是Win 7)。你找到解决方案了吗? - DMCS
27个回答

14

禁用回送检查

(原始微软页面在这里)

按照以下步骤设置DisableLoopbackCheck注册表键值:

单击“开始”,单击“运行”,输入regedit,然后单击“确定”。

在注册表编辑器中,找到并单击以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

右键单击Lsa,指向“新建”,然后单击“DWORD值”。

键入DisableLoopbackCheck,然后按ENTER键。

右键单击DisableLoopbackCheck,然后单击“修改”。

在“数值数据”框中,键入1,然后单击“确定”。

退出注册表编辑器,然后重新启动计算机。


Jeroen - 这个方法可行!谢谢!因为懒得重启,所以我试图调试现有的VS2010 web应用程序,但仍然遇到错误。我关闭了VS2010,然后杀掉了msvsmon.exe进程;重新打开带有该项目的VS2010,这次成功进行了调试。 - GarDavis
结果发现在一段时间后它仍然失败了,所以我仍在寻找解决方案。现在,杀死msvsmon并重新启动VS2010也没有帮助。 - GarDavis

12

我有一台新的PC,使用的是Windows 7操作系统。我安装了VS2010和我的开发环境,希望通过F5调试来解决问题,但是调试仍然无法启动。

这是一个好线索,因为它排除了软件安装的问题。

最终我追踪到了我的HOSTS文件。我为一些本地网站创建了一个条目,可以通过"http://testsite.lcl"访问,但我分配的IP地址却是我的机器IP,而不是用127.0.0.1,所以对于VS2010来说看起来像一个远程服务器。将其改回127.0.0.1后问题得到解决。

感谢大家的帮助。


它解决了我的问题!我以为是最近电脑和用户重命名引起的。你太棒了! - David Levin
主机文件也是我的问题所在!浪费了我一个上午才解决这个问题! - Libin M

10

我曾经遇到同样的问题。我是如何修复它的。

进入IIS(在我的情况下是IIS 7 / Windows 7)。 从列表中选择您的网站,在ASP.NET部分中单击.NET编译。选择打开功能。检查是否将调试设置为True。在我的情况下,它是False。一旦我将它更改为True,就恢复了我的调试 :)


最终也帮我解决了这个问题。奇怪的是,在我启用IIS站点上的SSL之前,它已经被设置为True了。当你启用SSL时,IIS7会修改你的web.config吗? - roadsunknown
1
如果你的APS.NET部分丢失,请参见:https://dev59.com/m3A75IYBdhLWcg3wi5sr - Kugel
这帮助了我。在尝试做这件事时,我发现我的web.config中有两个“编译”条目。 - lamarant

6
这些步骤可能因你的Windows版本而异。我使用的是带有iis 7的7。
打开IIS管理器,点击应用程序池并找到2个ASP.NET v4.0池(一个称为“ASP.NET v4.0”,另一个称为“ASP.NET v4.0经典版”)。很有可能第一个已停止。现在不要启动它,我们需要进一步研究。
对于“ASP.NET v4.0”池,请检查Identity字段中的名称。它是ApplicationPoolIdentity吗?请记住这个名字。
打开计算机管理(右键单击我的电脑并选择管理)。展开事件查看器,然后展开Windows日志。单击应用程序并等待数据加载。应该会出现一个源为用户配置文件服务的错误,并且消息以“Windows无法登录您,因为无法加载您的配置文件。请检查您是否连接到网络,以及您的网络是否正常运行。”开头。
如果确实发现了这个问题,则与我遇到的问题相同。
解决方案:返回IIS管理器,右键单击“ASP.NET v4.0”,然后选择“高级设置”。在进程模型下,第一个字段是Identity。将其从ApplicationPoolIdentity更改为NetworkService。单击确定。
现在,如果未自动重新启动池,则启动池。返回应用程序并按F5(开始调试),应用程序应该可以正常工作。
请注意,我还没有弄清楚为什么这样会起作用,而且这可能存在安全风险,但至少您可以在思考这个问题的同时继续工作。

谢谢,这不是我的解决方案 - 我所有的池都是“已启动”。 - GarDavis
这个解决方案对我很有用。我已经将应用程序池的身份设置为我的Windows帐户。在更改了我的帐户密码后,调试停止工作,但我没有将两个事件联系起来。阅读这个解决方案帮助我重新回到正轨。 - ConnorsFan
我遇到了这个问题,结果发现我的DefaultAppPool由于某些原因被停止了。所以你的答案指引了我正确的方向。谢谢。 - Mary Hamlin

4

我在运行我在Visual Studio 2010中创建的网站时,在Visual Studio 2012中遇到了这个问题。我尝试了以下每一项,但没有解决问题,但仍然可能是必需的:

  1. 检查App Pool是否针对与web.config中指定的相同框架

    <compilation defaultLanguage="c#" debug="true" targetFramework="4.0">
  2. 启动64位远程调试器: \Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Remote Debugger\x64\msvsmon.exe

  3. 设置DisableLoopbackCheck注册表键并重新启动Windows。MS Instructions here

  4. 本地浏览网站(它正常显示)。

  5. 最后,我找到了解决问题的IIS设置。

    1. 转到IIS(在我的情况下为7.5),然后单击Sites节点中的相关站点。
    2. 在ASP.NET部分中双击.NET Compilation。
    3. 在行为下,将Debug设置为True。
    4. 单击应用并在Visual Studio中运行站点。

3

首先,您可以使用IIS部署您的Web应用程序/站点,然后打开Visual Studio 2010。然后点击“文件”->“打开”->“网站”->“本地IIS站点”,然后选择您的网站/应用程序。然后您会发现调试可能会起作用。这种方法适用于我的情况。


3

我在Win7和VS2010上遇到了同样的问题(没有使用ReSharper),发现Skype监听了80端口。IIS默认监听80端口。当你设置VS调试运行在IIS中的现有Web应用程序时,这种情况可能会发生,而不是使用内置的ASP.NET调试Web服务器。

我解决了这个问题,方法是在Skype的“工具” -> “选项” -> “连接”下取消勾选“将80和443端口用作传入连接的备选项”,然后重新启动Skype。


2
在出现问题的工作站上,我没有安装Skype。尽管这个Skype端口问题影响了其他已经安装了Skype的电脑上的不相关问题。感谢您的评论。 - GarDavis

2
我的解决方法是进入服务器级别的IIS,点击ISAPI和CGI限制,我发现ASP.NET 4.0的aspnet_isapi.dll被设置为“不允许”。 我将其设置为“允许”,然后调试起作用了。步骤如下:
  1. 打开IIS。
  2. 点击顶层
  3. 在功能视图中选择IIS下的ISAPI和CGI限制
  4. 检查描述,如果ASP.NET v4 [当前版本]有“不允许”限制,则单击对话框中“操作”部分的“允许”链接。
这个更改应该解决问题。请注意,当我尝试运行Web应用程序时出现以下错误时,我想出了这个解决方案:
HTTP错误404.2-未找到 由于Web服务器上的ISAPI和CGI限制列表设置,无法提供您请求的页面。

1

还有一种尝试的方法(这是对我有效的):

在IIS中,点击“应用程序池”>(您的网站)>“高级设置”,并将“启用32位应用程序”更改为True。


0
在我的情况下,是web.config中的system.webServer > httpErrors > errorMode导致了问题。
如果你有errorMode="Custom",请尝试以下方法:
<httpErrors errorMode="DetailedLocalOnly">

请参考此答案:https://dev59.com/Q2445IYBdhLWcg3w4-Be#15585629,其中包含有关URL重写的变体和其他想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接