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

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

当我第一次尝试从本地网络段上的另一台机器浏览到我的机器时,我得到一个400错误: Hostname 无效。

我知道我需要在提升的命令提示符下使用一个命令来授予对 ACL 的远程访问权限,比如:

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

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

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

这个结构拼图的最后一块是什么?

70578 次浏览

似乎在 applicationhost.config 文件中缺少一个绑定信息条目。

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

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config(VS2015)
    • 如果没有,请检查 iisexpress.exe的输出以确认。
  2. 使用您的机器名称找到绑定后的网站条目和

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. Restart IIS Express

在这样一个完整的主题上浪费了超过3小时后,我决定与你分享我的设置。 我的配置是 VisualExpress2012,用于 Windows8上的 Web 更新4。这是我自学习(至少8年)以来第一次回到 MS VS,现在我确信 linux 规则。在 django 上,这种设置花费了我10分钟的搜索文档。

  1. 关闭防火墙进行测试

    netsh advfirewall set allprofiles state off
    
  2. setup bindings in my case local address is localIP=192.168.1.102 (because links can not contain nonnumeric domain, use it below instead of mylocaldomain.com, see stackoverflow policy) in Documents\IISExpress\config\applicationhost.config

    <bindings>
    <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
    <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. add autorun for ISS Express start service automatically

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. Add some weird rules to http server (I still do not know if this is nesseary)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. run IISExpress manually not from VS IDE

  6. you will see that ISSExpress is registering bindings
  7. run browser http://mylocaldomain.com:53351 if it is working then we can add firewall rule
  8. add firewall rule

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

set remoteip to any if you want to access you server from outside world if you want to access for local network use localsubnet

  1. start firewall

    netsh advfirewall set allprofiles state on
    
  2. check again if everything is working on local and public ip

Wish you luck

Rafal

我什么都没用,最后我找到了 IisExpress- 代理服务器

看我的答案 https://stackoverflow.com/a/33623399/631527

另一种解决方案是 ngrok

只有一件事对我有用。

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

我在本地测试了一些东西,发现只有 http://localhost可以工作。使用真正的 IP 地址(不是127.0.0.1,而是192.168.1.50) ,即使在本地机器上也会返回一个503。我尝试在绑定中使用真正的主机名,但是 IISExpress 拒绝启动。这实际上可能与如何解析主机名有关。我没有进一步探究。

最后,我使用了这个配置:

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

通过这种方式,我能够使用 http://192.168.1.50:53351从远程机器连接。

发现问题与错误的 urlacl 映射有关:

netsh http show urlacl

并寻找类似 http://+:80/或绑定到的端口。

那就用

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

这为我解决了问题。

帮助我的是右键单击“ IISExpress”图标,“显示所有应用程序”。然后选择这个网站,我看到它使用的是哪个 applicationhost.config,修正过程非常完美。

IISExpress configuration

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

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

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

例如:

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

以上所有的答案对我都不起作用。

我已经在 netsh 中为同一个服务输入了两个条目

netsh http show urlacl

enter image description here

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

删除带有弱通配符的那个就可以了。

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

当 UrlPrefix 的 host 元素由单个加号组成时 (+)中的所有可能的主机名匹配 其方案,端口和相对 URI 元素,并落入强 通配符类别通配符类别。

如果星号(*)作为主元素出现,则 UrlPrefix 属于弱通配符类别。这种 UrlPrefix 匹配 任何与指定的方案、端口和 没有被强通配符匹配的 relativeURI, 显式的或 IP 绑定的弱通配符 UrlPrefix 在某些情况下,可以作为默认的全面覆盖,或者可以 用于指定大部分 URL 命名空间,而不必使用 很多 UrlPrefix。

Https://learn.microsoft.com/en-gb/windows/desktop/http/urlprefix-strings

解决@vikomall 问题后,不要忘记启动 VS 作为管理员。 这个能帮我修好。