Web 请求失败,但仅适用于 localhost 和使用 System.Net.HttpWebRequest
Posted
技术标签:
【中文标题】Web 请求失败,但仅适用于 localhost 和使用 System.Net.HttpWebRequest【英文标题】:Web request fails, but only for localhost and when using System.Net.HttpWebRequest 【发布时间】:2015-02-08 05:42:35 【问题描述】:System.Net.HttpWebRequest
有一个非常奇怪的问题,这让我抓狂:当我使用localhost
地址运行它时,它要么非常慢(大约 30 秒),要么在大多数情况下,它完全超时。这只发生在以 localhost
为目标的请求中,并且仅来自 C# 代码。
具体来说,以一个 ASP.NET Web API 项目为例,当我有这段代码时:
[Test]
public void TestRequest()
var request = WebRequest.Create("http://localhost:64497/api/values");
WebResponse response = request.GetResponse();
..它在大多数情况下都会因为这个异常而失败:
System.Net.WebException:无法连接到远程服务器 ----> System.Net.Sockets.SocketException : 连接尝试失败,因为连接方在一段时间后没有正确响应 时间或建立连接失败,因为连接的主机有 未能响应 127.0.0.1:64497
通过检查 .NET 代码,我找到了 WSAConnect API 返回非空值的错误,但我看不出这有多大帮助。 (但是,这是一个 32 位的 API,而我在 64 位系统上运行。会不会有一些奇怪的 32/64 位问题?)
当我使用 localhost 以外的地址(比如http://www.google.com)运行上述代码时,它会正常运行,并且我得到大约 1 秒的响应时间。 另外,当我从不同的客户端提交上述请求时(我使用 Chrome 的Advanced REST Client),然后我得到正常行为:由于初始编译,第一个请求的延迟时间约为 5-8 秒,响应时间很短所有后续请求的时间(20-40 毫秒)。
鉴于这些发现,在我看来很明显,问题一定来自特定于 System.Net.HttpWebRequest
类的实现...
Web 应用程序本身托管在 IIS Express 上,但我很确定这无关紧要,因为上述请求从未到达 Web 服务器(我通过从命令行运行 IIS Express 然后检查通过以及每个 ProcessMonitor 发出的请求)。
更多信息: 我正在运行 Win 8.1 64bit 和 VS 2013 SP4 pro。 系统的 HOST 文件未修改,即不包含任何条目。
到目前为止我尝试过的事情:
在管理员模式下运行 VS 关闭所有防火墙和防病毒软件 使用 IIS 而不是 IIS Express 根据代码和配置将 proxysettings 显式设置为 null 根据 ProcessMonitor 检查 IIS Express 进程 - 没有结果(正如我所说,我很确定 Web 服务器没有直接涉及此问题) 将localhost
更改为127.0.0.1
我不明白问题出在哪里,我在网上找不到任何相关信息。我什至没有更多的想法可以尝试追踪错误。换句话说:我完全坚持这一点,它有效地阻止了我针对本地托管的 Web 编写任何集成测试。非常感谢任何帮助/提示/提示。
【问题讨论】:
在其他问题中没有答案...希望有一个,因为我也陷入了同样的问题:) 【参考方案1】:只是为了检查这部分: “通过检查 .NET 代码,我找到了返回非空值的 WSAConnect API 的错误,但我看不出这有多大帮助。(但是,这是一个 32 位 API,而我是在 64 位系统上运行。会不会有一些奇怪的 32/64 位问题?)"
确保在 IIS 中,为应用程序池启用 32 位(默认为禁用)。
另外,我假设绑定设置正确。 (最后一部分 [绑定] 应该是评论,但我没有代表 - 它显然已被删除 - 或将被删除)
【讨论】:
以上是关于Web 请求失败,但仅适用于 localhost 和使用 System.Net.HttpWebRequest的主要内容,如果未能解决你的问题,请参考以下文章
在 GCC 中将 0 参数传递给可变参数宏失败,但仅在 C++ 中?