首页 文章

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

提问于
浏览
173

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

当我第一次尝试从本地网段上的另一台机器浏览到我的机器时,出现400错误:主机名无效 .

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

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

现在我得到503服务不可用错误 .

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

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

9 回答

  • 250

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

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

    • %userprofile%\Documents\IISExpress\config\applicationhost.config

    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)

    • 如果失败,请检查 iisexpress.exe 的输出以确定 .

    • 使用您的机器名称绑定后,找到您的WebSite条目和 add .

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

    只有一件事对我有用 .

    使用 *: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 从远程计算机进行连接 .

  • 0

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

    • 关闭防火墙进行测试
    netsh advfirewall set allprofiles state off
    
    • 设置绑定在我的案例中本地地址是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>
    
    • 自动为ISS Express启动服务添加自动运行
    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
    • 向http服务器添加一些奇怪的规则(我仍然不知道这是否是nesseary)
    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
    • 不是从VS IDE手动运行IISExpress

    • 你会看到ISSExpress正在注册绑定

    • 运行浏览器 http://mylocaldomain.com:53351 如果它正常工作,那么我们可以添加防火墙规则

    • 添加防火墙规则

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

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

    • 启动防火墙
    netsh advfirewall set allprofiles state on
    

    如果所有内容都在本地和公共IP上运行,请再次检查_0009

    祝你好运

    拉法尔

  • 18

    发现问题与坏的urlacl映射有关 . 想一想:

    netsh http show urlacl
    

    并查找 http://+:80/ 或您绑定的端口等内容 .

    然后用

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

    这解决了我的问题 .

  • 0

    没有什么对我有用 . 最后我找到iisexpress-proxy

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

    另一种解决方案是 ngrok

  • 1

    是什么帮助我,是右键单击'IISExpress'图标,'显示所有应用程序' . 然后选择网站,我看到它使用了哪个aplicationhost.config,并且纠正完美 .

    IISExpress configuration

  • 1

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

  • 26

    关于Anthony Rizzolo的回答:在Windows 8.1中,我必须输入如下内容:

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

    例如:

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

    以上答案都不适合我 .

    我在netsh中有两个相同服务的条目

    netsh http show urlacl

    enter image description here

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

    删除弱通配符的那个就完成了这项工作 .

    更多关于netsh背景下的强弱通配符

    当UrlPrefix的host元素由单个加号()组成时,UrlPrefix会在其scheme,port和relativeURI元素的上下文中匹配所有可能的主机名,并且落入强大的通配符类别 . 当星号(*)显示为主机元素时,UrlPrefix将进入弱通配符类别 . 这种UrlPrefix匹配与指定方案关联的任何主机名,端口和relativeURI尚未与强通配符,显式或IP绑定的弱通配符UrlPrefix匹配 . 在某些情况下,此主机规范可用作默认的catch-all,或者可用于指定URL命名空间的大部分,而无需使用许多UrlPrefix .

    https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

相关问题