IISExpress从远程计算机返回503错误


183

我试图测试我在本地IISExpress实例中与本地网络上的其他一些机器/设备运行的网站。我正在运行Win7 Pro。

第一次尝试从本地网段中的另一台计算机浏览到我的计算机时,出现400错误:主机名无效。

我了解我需要使用提升的命令提示符下的命令授予对ACL的远程访问权限,例如:

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

现在我得到一个503服务不可用的错误。

Windows防火墙当前已关闭,我可以使用以下地址浏览我的本地IISExpress实例: http://localhost:50333

这个配置难题的最后一部分是什么?


1
如果你浏览到会发生什么http://mymachinename:50333/ ,从你的电脑吗?
Panic Panic

1
这个问题已经解决。请参阅从vikomall接受的答案
杰夫·弗里茨

1
对此进行更深入的讨论:hanselman.com/blog/…–
Chris Moschini

3
您可以安装我们的免费VS扩展“输送”来解决这个问题marketplace.visualstudio.com/...
吉姆W¯¯说起用莫妮卡

Answers:


270

看来您缺少applicationhost.config文件中的绑定信息条目。

  1. 打开您的applicationhost.config文件。可能的位置是:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • 如果失败,请iisexpress.exe确保检查输出。
  2. 找到您的WebSite条目,并使用您的计算机名称添加以下绑定。

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. 重新启动IIS Express


9
没关系。Visual Studio为该项创建了一个重复的配置条目。我删除了它,它起作用了。
nuzzolilo 2012年

3
IIS Express并不总是在该路径上使用配置文件。iisexpress.exe仔细阅读输出,以查看其使用的配置文件。
Panic Panic

5
关键点3,重新启动IIS Express!在系统托盘中找到该图标,然后将其停止以强制重新启动。不知道是否有更优雅的方法。但这对我有用。谢谢!
参议员

9
如果您懒得添加每个主机名/ IP地址组合,请使用*代替“您的计算机名”
StarQuake 2014年

4
另一个提示:如果右键单击IISExpress的systray图标,则可以选择“显示所有应用程序”,这将打开一个对话框,显示您当前在本地运行的所有应用程序。右键单击所需的应用程序(不要单击鼠标左键,否则它将打开浏览器),然后您将在下面看到“路径”和“配置”。左键单击“配置”,它将打开相关的Applicationhost.config文件,您需要在其中添加/编辑如上所述的绑定。这是找到当前配置的简便方法。
马特

30

只有一件事对我有用。

使用*:portnumber:*不好。是的,这样做并确保Windows防火墙已打开之后,我可以连接到该端口,但是仍然出现“ 503”错误。

我在本地测试了几件事,发现只有http:// localhost可工作。使用实际IP地址(不是127.0.0.1,但是例如192.168.1.50),即使在本地计算机上,仍返回503。我尝试在绑定中使用真实的主机名,但IIS Express拒绝启动。这实际上可能与主机名的解析方式有关。我没有进一步探讨。

最后,我最终使用了以下配置:

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

这样,我可以使用来从远程计算机进行连接http://192.168.1.50:53351


我遇到了这个确切的错误,但是由于它可以更改,因此不想将当前IP硬编码到配置中。我发现通配符在IP和主机名部分上起作用,所以我最终得到: <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> 编辑:确实试图了解SO降价,我退出了:)。
Brian Barker

19

在这样一个完整的主题上浪费了超过3小时后,我决定与您分享我的设置。我的配置是Windows 8上用于Web更新4的Visual Express2012。这是我自学习(至少8年)以来第一次回到MS VS,现在我确定Linux会适用。在Django上,这种设置花了我10分钟的时间来搜索文档。

  1. 关闭防火墙进行测试

    netsh advfirewall set allprofiles state off
    
  2. 在我的情况下,设置绑定的本地地址是localIP = 192.168.1.102(因为链接不能包含非数字域,请在下面使用它代替mylocaldomain.com,请参阅stackoverflow策略) Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. 自动为ISS Express启动服务添加自动运行

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. 向http服务器添加一些奇怪的规则(我仍然不知道这是否必要)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. 不从VS IDE手动运行IISExpress

  6. 您会看到ISSExpress正在注册绑定
  7. 运行浏览器(http://mylocaldomain.com:53351 如果正在运行),那么我们可以添加防火墙规则
  8. 添加防火墙规则

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

如果要从外部访问服务器,则要将remoteip设置为any,如果要访问本地网络请使用localsubnet

  1. 启动防火墙

    netsh advfirewall set allprofiles state on
    
  2. 再次检查是否一切都在本地和公共ip上运行

祝你好运

拉法尔


3
如果不以管理员身份运行VS2013,这将导致IIS Express不再在带有VS2013的Win8上运行。这是由于IIS Express现在尝试通过netsh命令向外部流量开放。我也从来没有能够真正得到它服务于这种流量。我会得到503。要解决此答案中netsh命令引起的问题,请从以管理员身份运行的命令提示符中运行此命令:(netsh http delete urlacl url=http://*:55416/用您的端口替换端口)
Chris Moschini 2014年

fwiw-我不需要步骤4(不确定是否需要@Rafal的netsh调用),尽管我不需要步骤2中的“ localhost”绑定来在我的解决方案中运行VS2013项目,当该“本地主机”绑定保留在原处时,end加载速度明显加快。
lukkea 2015年

我发现遵循上述说明仍然导致503使用localhost。我发现来宾(Windows)的计算机名称必须位于中的绑定中applicationhost.config,而在主机(Mac)上,来宾的计算机名称则需要映射至127.0.0.1/etc/hosts。只有这样,对主机上的来宾计算机的请求才成功。
马特

步骤5的一项添加。使用iisexpress.exe / siteid:id,其中id是<site id =“ id”>设置中站点ID属性的值,否则它将启动第一个站点。
Mudit Jain

9

发现问题与不良的urlacl映射有关。要弄清楚这一点:

netsh http show urlacl 

并寻找类似的东西http://+:80/或您要绑定的端口。

然后使用

netsh http delete url=<the url from the list>

这为我解决了问题。


4
应该是netsh http delete urlacl url = <列表中的url>,这对我有用!
sergiogx '16

1
有关此问题,请参见msdn博客。最终,这也是我的问题。
凯文·沙恩霍斯特

3
谢谢,确切的语法是netsh http delete urlacl <yoururl>
yoel halb

7

什么都没有为我工作。终于我找到了isexpresspress-proxy

见我的回答https://stackoverflow.com/a/33623399/631527

另一个解决方案是 ngrok


惊人!我尝试了所有其他解决方案,但它们也不起作用。“错误请求”或“服务不可用”。太复杂。我安装了节点模块并运行它,它立即起作用!
2016年

作品!圣!谢谢!
艾森·巴克斯特

还可以查看ngrok
Toolkit

1
它与ngrok一样魅力十足!必须先从本地主机路由到iis-proxy,然后再从代理服务器路由到ngrok,这很奇怪,但是,嘿!例如,我将iisexpress安装在port上3028。我跑了iisexpress-proxy 3028 to 12345,然后./ngrok.exe http 12345。😅
鲁埃尔·里贝罗

@TetraDev,“坏请求”或“服务不可用”,是因为从ngrok accesing本地主机时接收到的主机头不是本地主机一个作为解释此处
达尼Torres的

3

帮我忙的是右键单击“ IISExpress”图标“显示所有应用程序”。然后选择该网站,我看到了它使用的aplicationhost.config,并且进行了正确的修正。

IISExpress配置


1

问题是更新Web文件夹中的applicationhost.config文件,而不是解决方案的文件。解决方案配置文件是一个要更改的文件


1

解决@vikomall后,别忘了以管理员身份启动VS。这为我解决了。


0

关于Anthony Rizzolo的回答:在Windows 8.1中,我必须这样输入:

netsh http delete urlacl url=<the url from the list>

例如:

netsh http delete urlacl url=http://+:8689/

0

上面的答案对我都不起作用。

我在netsh中有两个条目用于同一服务

netsh http show urlacl

在此处输入图片说明

一个使用强通配符,另一个使用弱通配符。

用弱通配符删除一个就可以了。

有关netsh上下文中强弱通配符的更多信息

当UrlPrefix的host元素由一个加号(+)组成时,UrlPrefix会在其scheme,port和relativeURI元素的上下文中匹配所有可能的主机名,并且属于强通配符类别。

当星号(*)作为主机元素出现时,UrlPrefix属于弱通配符类别。这种类型的UrlPrefix与尚未与强通配符,显式或IP绑定的弱通配符UrlPrefix匹配的与指定方案,端口和relativeURI相关联的任何主机名匹配。在某些情况下,此主机规范可以用作默认的全部包,也可以用于指定URL名称空间的较大部分,而不必使用许多UrlPrefixes。

https://docs.microsoft.com/zh-CN/windows/desktop/Http/urlprefix-strings

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.