无法启动IIS Express Web服务器,注册URL失败,访问被拒绝。

223

我的一些Web项目运行正常,但有些却有问题。我决定专注于其中一个有问题的项目。 我使用Windows 7上的Visual Studio 2013。我认为我是以管理员身份运行的,窗口标题显示为项目名称 - Microsoft Visual Studio(管理员)

当我尝试运行该项目时,会弹出一个窗口,显示:

  

无法启动IIS Express Web服务器。

     

无法为网站“SITE NAME”应用程序“/”注册URL“http://localhost:62940/”。 错误描述:拒绝访问。 (0x80070005)。

这似乎并不完全罕见但我尝试了很多建议都没有成功:

  1. 删除%userprofile%\Documents\IISExpress\,尝试运行。

  2. netsh http add urlacl url=http://localhost:62940/ user=everyone,重启并尝试运行。(实际上是user=Alla,因为我的Windows是瑞典语)。

  3. netsh http delete urlacl url=http://localhost:62940/,重启并在%userprofile%\Documents\IISExpress\config\applicationhost.config中将<绑定协议="http" bindingInformation="*:62940:localhost/">更改为<binding protocol="http" bindingInformation="*:62940:/>,然后尝试运行。(这确实改变了错误消息,使其说... URL "http://*:62940/" ...)。

  4. 重新安装IIS 8.0 Express

  5. 重新安装Visual Studio 2013

我束手无策了,我做错了什么?

如果我更改项目的端口(例如改为55555),它就会启动... 这不是一个理想的解决方案,因为这些项目由多个人开发。也许端口被其他东西阻塞了?如果是这样,有没有一种简单的方法来检查它?

端口62940似乎是空闲的。运行netstat不显示任何监听它的应用程序。一定还有其他问题。

我试图在几个月没有接触过它之后今天启动该项目。它能够工作但我不知道为什么。


2
运行 netstat -aon | findstr 命令,查看是否有其他应用程序也在监视端口62940。如果是这样,您不能监视该端口,但必须切换到另一个端口。当明显不是原因时,请勿更改 applicationHost.config 或 netsh http - Lex Li
我按照建议运行了 netstat。似乎没有应用程序监视端口62940。肯定还有其他问题。 - Linus
3
重启对我有用。 - Patrick Borkowicz
重启VS解决了我的问题。 - gajama
43个回答

107

是的,我同意,顶级答案确实是专业解决方案。这里有一个适合中级者的解决方案:

解决方案资源管理器

  1. 右键单击项目,选择卸载项目
  2. 再次右键单击并选择编辑 ProjectName.csproj
  3. 删除这3行
<DevelopmentServerPort>0</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:62940/</IISUrl>

保存并重新加载项目,然后你就可以开始了。

1
任何其他到达这里的人,我不得不在 .csproj.csproj.user 中进行删除。顺便说一下。 - dgo
对我来说有效 - user1719554

103

我通过更改项目的端口来解决了错误。

我按照以下步骤操作:

1 - 右键单击项目。
2 - 转到属性。
3 - 转到服务器选项卡。
4 - 在选项卡部分,将项目URL更改为其他端口,如8080或3000。

祝好运!


这在2022年已经不起作用了,因为该选项从2023年6月开始不再可用。 - Mushfiqur Rahman Abir

72

尝试(以高级管理员身份)

netsh http delete urlacl url=http://*:62940/

13
这有所帮助,但在我的情况下还不够。我还需要使用 netsh http add urlacl url=http://localhost:62940/ user=Everyone 添加正确的URL。 - sboisse
在我的情况下 - 这个列表中没有人使用这个端口... - Alexander

66
使用IIS Express托盘图标停止引起问题的网站是解决这个问题的理想方式。为此,请单击任务栏右侧的向上箭头,并右键单击IIS Express图标。这将弹出一个小窗口,显示IIS Express当前正在运行的网站...

IIS Express pop up

如果您单击“查看站点”下的某个项目,则可以选择停止该站点。或者,您可以在窗口底部单击“退出”项以停止所有网站。
这样应该可以使您在Visual Studio中进行调试。当您再次开始调试时,IIS Express将自动重新启动网站,并应能够分配端口。
如果失败了,你必须采用肮脏的方法。打开Windows任务管理器并终止Microsoft.VisualStudio.Web.Host.exe*32进程,然后您就可以正常运行项目。请注意,这将完全杀死IIS Express,这意味着所有网站都将停止,因此如果您想调试其他网站,您将需要在VS中重新启动每个网站。尝试首先使用弹出式图标方法,因为它更干净、更安全。
不知道这是否解决了您的问题,但对我有效。
更新:感谢JasonCoder(请参见下面的评论)添加了Win10上的进程Microsoft.VsHub.Server.HttpHost.exe

65

这是我找到的唯一解决方案

net stop winnat

net start winnat

感谢Matt


1
这个方法在2022年11月使用Win10对我有效!谢谢。 - sanpat
1
2023年1月对我有效。 - Ivan-San
1
2023年3月份我用过。VS 2022 Windows 10。 - Mausam
3
在Windows 11上对我有效。2023年6月。 - Jason Boydell
Windows NAT驱动程序服务未启动。 - Alexander
1
对我有效的唯一解决方案。谢谢! - undefined

59

在使用Visual Studio 2015时,解决方案可能与以前的答案有所不同。VS2015会在与解决方案文件相同的文件夹下创建一个名为 .vs 的隐藏文件夹。在其中有一个包含applicationhost.config的config文件夹。删除这个文件(或整个 .vs 文件夹),然后启动VS2015以重新创建它,可以解决此错误。


57

最近我也遇到了这个错误。尝试了上面提到的所有修复方法,但都没有解决问题。

要禁用它,请在命令提示符中键入services.msc,然后右键单击并禁用Internet Connection Sharing。我还编辑了其属性以在启动时禁用。现在我的设置如下所示:服务截图


我正在使用VS2022,这个答案对我很有帮助。尝试了几种其他的解决方案,但只有这一个有效。快速简单的修复。 - sanpat

57

当我在Windows 10上使用Visual Studio 2019运行我的应用程序时,遇到了同样的问题。经过一段时间的搜索和尝试各种提出的解决方案都没有成功后,我确定"拒绝访问"错误是由于我的应用程序使用的端口号(50403)落入了"排除端口范围"中。

您可以使用以下命令查看排除的端口范围:

netsh interface ipv4 show excludedportrange protocol=tcp

经过更多的谷歌搜索,我发现导致这些排除范围的最有可能的罪犯是Docker和Hyper-V。我的电脑上没有安装Docker,但安装了Hyper-V。

我的解决方案

  1. 禁用Hyper-V:控制面板->程序和功能->打开或关闭Windows功能。取消选中Hyper-V
  2. 重新启动电脑。
  3. 将您正在使用的端口添加到端口排除范围中:netsh int ipv4 add excludedportrange protocol=tcp startport=50403 numberofports=1 store=persistent
  4. 重新启用Hyper-V
  5. 重新启动电脑

我将我正在使用的端口添加到排除列表中,以确保在重新启用Hyper-V后不会再次遇到此问题。在第4步和第5步之后,当我查看排除的端口范围时,我可以看到Hyper-V保留了一个从我的端口之后开始的端口范围。

排除的端口范围

我的应用程序现在完美地运行!


将端口添加到排除列表中有何帮助?这难道不意味着TCP不能再使用该端口了吗? - ANewGuyInTown

34

在我尝试从远程位置访问网站时,发生了这种情况:

最初,applicationhost.config(VS2015)包含标准内容:

<binding protocol="http" bindingInformation="*:64376:localhost" />

为了从网络中的远程位置访问我的网站,我添加了(步骤1):

<binding protocol="http" bindingInformation="*:64376:192.168.10.132" />

然后,我以管理员权限进入了CMD(第2步):

netsh http add urlacl url=http://*:64376/ user=Everyone

作为第三步,我将它添加到了防火墙规则中。

netsh advfirewall firewall add rule name=”IISExpressWeb” dir=in protocol=tcp localport=64376 profile=private,domain remoteip=localsubnet action=allow

然后,当我再次尝试运行解决方案时,出现了这个错误。

解决方案:看起来我已经做对了一切,但直到我也为现有的localhost规则运行了netsh之后,它才起作用:

netsh http add urlacl url=http://localhost:64376/ user=Everyone

现在它又可以工作了。


27

我刚遇到了类似的问题。我不确定如何描述实际错误,但似乎预定中的主机名不正确。请尝试在提升的命令提示符中执行以下操作:

netsh http delete urlacl url=http://localhost:62940/

然后执行以下操作:

netsh http add urlacl url=http://*:62940/ user=everyone

重启您的站点,它应该可以正常工作。


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