191

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

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

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

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

现在我收到 503 服务不可用错误。

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

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

4

10 回答 10

279

看起来您在 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. 重新启动 IIS Express

于 2011-03-27T21:07:41.853 回答
35

只有一件事对我有用。

使用*: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.

于 2016-01-31T21:17:08.890 回答
19

在如此完整的主题上浪费了 3 多个小时后,我决定与您分享我的设置。我的配置是 Visual Express 2012 for Web update 4 on windows 8。这是我自从学习(至少 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 添加 autorun 自动启动服务

    <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 上工作

祝你好运

拉法尔

于 2014-10-17T14:32:11.643 回答
10

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

netsh http show urlacl 

并查找http://+:80/您要绑定的端口之类的东西。

然后使用

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

这解决了我的问题。

于 2016-07-22T17:44:45.410 回答
7

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

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

另一种解决方案是ngrok

于 2015-11-10T05:34:47.270 回答
4

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

IISExpress 配置

于 2016-11-18T08:35:22.667 回答
1

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

于 2017-08-31T22:18:38.803 回答
1

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

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

例如:

netsh http delete urlacl url=http://+:8689/
于 2018-04-26T05:27:46.083 回答
1

在@vikomall 解决后不要忘记以管理员身份启动VS。这给我修好了。

于 2019-05-06T10:09:28.973 回答
0

上面的答案都不适合我。

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

netsh http show urlacl

在此处输入图像描述

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

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

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

当 UrlPrefix 的主机元素由单个加号 (+) 组成时,UrlPrefix 匹配其方案、端口和 relativeURI 元素上下文中所有可能的主机名,并属于强通配符类别。

当星号 (*) 作为宿主元素出现时,UrlPrefix 属于弱通配符类别。这种 UrlPrefix 匹配与指定方案、端口和 relativeURI 关联的任何主机名,这些主机名尚未被强通配符、显式或 IP 绑定的弱通配符 UrlPrefix 匹配。在某些情况下,此主机规范可用作默认的包罗万象,或者可用于指定大部分 URL 命名空间而无需使用许多 UrlPrefix。

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

于 2018-10-01T08:44:56.933 回答