【发布时间】: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 编写任何集成测试。非常感谢任何帮助/提示/提示。
【问题讨论】:
-
在其他问题中没有答案...希望有一个,因为我也陷入了同样的问题:)
标签: c# httpwebrequest localhost