4

您好 Stackoverflow 用户!

这是发生在我身上的一件有趣的事——也许你能解释一下为什么?

昨天我的工作日进行到一半时,我安装的 IIS Express 停止工作。

起初我以为是我正在做的 ASP.NET 项目的问题,只是挂起,无法启动,因为页面一直挂起,直到超时。然后我尝试了其他一些项目,也设置为在 localhost:8080 上运行——它们也不会加载——甚至是纯 HTML 的。

现在,当我说他们不会加载时;我的意思是根本没有活动。该页面将在 chrome 中“加载”很长时间,并且 IISExpress 控制台不会注册任何 GET 请求,直到最终 chrome 中的选项卡会显示超时错误。

今天早上,我(在一些帮助下)想出了一些办法——由于某种原因,当我 ping 时会返回localhostipv6 地址::1:而不是 ipv4 地址127.0.0.1——我以前没有注意到这种行为,也没有更改任何网络设置。

我编辑了我的 HOST 文件,并包含了一个127.0.0.1 localhost强制ping localhost返回 ipv4 地址的条目。这有效,当我再次尝试将 IIS Express 绑定到 localhost:8080 时,它也有效。

我的问题是到底怎么回事?!?!

我不知道为什么会这样。我知道我已经通过编辑我的 HOST 文件设法解决了个别问题,但是有谁知道到底为什么会发生这种情况?

知道为什么ping localhost会突然开始返回 ipv6 地址吗?知道为什么 IIS Express 不能与 ipv6 一起使用吗?(我假设 IIS 引擎现在已经包含了它)。

我想了解发生了什么以避免任何进一步的问题,并且出于好奇。

在此先感谢您的任何信息,

菲尔

4

2 回答 2

3
  • 打开一个管理 cmd 窗口,然后使用您绑定到的端口执行此操作:netsh http add urlacl url="http://[::1]:8080/" user=everyone. 这告诉您的系统绑定到很酷::1
  • 打开%USERPROFILE%\Documents\IISExpress\config\applicationhost.config,找到您站点的部分,然后添加 IPv6 绑定:<binding protocol="http" bindingInformation="[::1]:8080:*" />

样本:

<site name="WebSite1" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\ryan.versaw\Documents\WebSite1" /> </application> <bindings> <binding protocol="http" bindingInformation="*:8080:localhost" /> <binding protocol="http" bindingInformation="[::1]:8080:*" /> </bindings> </site>

于 2014-08-18T15:19:27.913 回答
0

只要您的系统上启用了 IPv6, ::1 和 127.0.0.0 都是“localhost”的有效地址。两者中的哪一个由系统返回并用于例如 pings 或多或少是不确定的,除非程序专门请求 IPv4 或 IPv6 地址 - 并且由于 Windows 的 ping 可以处理任何一个,它可能没有这样做。

至于 IIS,像这样的答案表明这种行为是故意的,您需要单独启用绑定到 IPv6 地址:https ://serverfault.com/questions/123796/get-iis-7-5-to-listen-在 IPv6 上

于 2013-01-16T13:11:23.407 回答