无法启动IIS Express Web服务器

9
每次我尝试调试我的 asp.net 网站时,就会出现以下错误:
无法启动 IIS Express Web 服务器。
在网站“SociopackWebAPI”的应用程序“/”上为URL“http://localhost:50010/”注册失败。 错误描述:进程无法访问该文件,因为另一个进程正在使用它。(0x80070020)
在 Event Viewer 中,我注意到日志中出现了以下错误:
应用程序池'Clr4IntegratedAppPool'的工作进程PID='13248'在被要求开始处理 HTTP 请求时未能初始化 http.sys 通信,因此将被 W3SVC 视为不健康并终止。数据字段包含错误号。
我认为这意味着我的 Clr4IntegratedAppPool 没有足够的权限? 我该如何解决这个问题?

1
尝试如下操作: 以管理员身份运行Visual Studio, 尝试更改端口号。确保仅运行一次,有时运行两个包括相同项目的解决方案可能会导致此问题,因为您可能会尝试运行同一项目超过一次。 - Dilip
7个回答

13

IIS Express无法正确启动的一个原因是它想要使用的端口被保留。如果端口未被使用,则您想要使用的端口不会显示在netstat -an | findstr <your port number>中。

您可以更改要使用的端口或删除保留。

查看保留(提升的命令提示符):netsh int ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
        80          80
       443         443
     50000       50059     *

* - Administered port exclusions.

如果保留的端口范围未被使用,您可以使用netsh int ipv4 delete excludedportrange protocol=tcp startport=50000 numberofports=60命令删除该范围。应该回复Ok.如果得到Access denied.则是因为该范围当前正在使用中。您需要关闭使用这些端口的程序以创建与该范围相交的保留区间。
如果您想重新创建该范围,请使用netsh int ipv4 add excludedportrange protocol=tcp startport=50000 numberofports=60
我遇到了这个问题,因为我最近安装了Hyper-V和Docker,我的IIS Express在事件日志中抛出ID 2269的错误事件: The worker process for app pool 'Clr4IntegratedAppPool', PID='12345', failed to initialize the http.sys communication when asked to start processing http requests and therefore will be considered ill by W3SVC and terminated. The data field contains the error number. 随后出现了2276: The worker process failed to initialize correctly and therefore could not be started. The data is the error. 解决方案来源:Docker for Windows – Port Reservations | Developer Musings

这解决了我的问题。我在保留列表中找到了我正在使用的端口,并将项目配置中的项目URL端口更改为不在这些保留范围之内的端口。 - Stefanvds
哇塞,这是在重新安装了Visual Studio和IIS Express之后的情况,谢谢你伙计。 - undefined

3

我也遇到了VS2017/IIS Express 10相同的问题。在论坛上尝试了一些技巧,但唯一真正解决这个bug的方法如下:

  1. 关闭所有Visual Studio实例和IIS Express(如果正在运行)
  2. 进入Windows的"程序和功能",找到已安装程序列表中的IIS Express,然后点击"卸载"
  3. 重启计算机,确保所有进程都已关闭
  4. 从Microsoft下载独立的IIS Express 10安装程序:https://www.microsoft.com/en-us/download/details.aspx?id=48264
  5. 安装它,打开Visual Studio,就应该可以正常工作了。

对于最新版本的Windows 11和VS 2022,它仍然可以工作。谢谢你的答案! - Mark.Fang

1

如果您找不到解决方案,请尝试以下方法:

  1. Enter Windows + R & type Regedit
  2. Go to the following path:

    Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP
    
  3. Change the value of name Start from 4 to 3.

    Change Start from 4 to 3


你能解释一下这段代码在做什么吗? - Jared Beach
1
@JaredBeach,开始4是“已停用”。3是“手动”。为了完整起见,2是“自动”,1是“自动(延迟)”。实际上,“手动”应该被理解为“按请求操作”。 - Heki

0

"进程无法访问文件,因为它正在被另一个进程使用" 通常意味着该端口已经有其他进程在监听。也许您已经启动了相同的应用程序两次?


没有其他应用程序在使用该端口;我已经通过 netstat -ao 和资源监视器进行了验证。 我已经检查了所有的IIS Express 配置,没有任何配置问题。 这个错误很令人困惑。 似乎只有重启机器才能解决它。 - crush
我还使用了netstat和resmon来查看是否有任何东西在该端口上监听。但是没有。我尝试增加端口号,但是出现了相同的错误。最终,我尝试了一些完全不同的端口,这样就成功了。我怀疑像Docker这样的东西已经保留了该端口,或者构建过程启动了一个中间端口,与自身发生冲突。 - Peheje
可能是一个保留端口。请查看我的答案以获取详细信息。 - Heki

0
这种情况发生在我使用VS2019打开旧解决方案时。这里的所有答案都对我无效。所以我选择了另一种方法。
我创建了一个新的ASP.NET解决方案,并查看其使用的端口,它使用的是61384
然后我关闭了我的解决方案,打开了.sln文件并更改了端口。
重新加载解决方案后,它就工作了。

enter image description here


0

这对我有用:

  1. 恢复绕过遍历检查权限(参见参考文献)

我只做了#2,因为我已经拥有正确的特权。

  1. 重新启动W3SVC和HTTP服务 使用net命令重新启动W3SVC和HTTP服务:

打开提升的命令提示符窗口。单击“开始”,指向“所有程序”,单击“附件”,右键单击“命令提示符”,然后单击“以管理员身份运行”。输入:

net stop w3svc
net stop http
net start w3svc
net start http

参考:https://social.technet.microsoft.com/wiki/contents/articles/21750.event-id-2269-iis-worker-process-availability.aspx


0

确保服务Application Host Helper Service(AppHostSvc)正在运行。还要确保Host Network Service(hns)正在运行。

一些ASP.NET网站可能还需要运行ASP.NET State Service(aspnet_state)。


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