Web 请求失败,但仅适用于本地主机和使用 System.Net.HttpWebRequest 时

本文关键字:System Net HttpWebRequest 主机 失败 请求 适用于 Web | 更新日期: 2023-09-27 18:33:56

我在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 位问题?

当我使用本地主机以外的地址(例如 http://www.google.com(运行上述代码时,它表现正常,响应时间约为 1 秒。此外,当我从其他客户端提交上述请求时(我使用了Chrome的高级REST客户端(,然后我得到了正常行为:由于初始编译,第一个请求的延迟时间约为5-8秒,所有后续请求的响应时间非常短(20-40毫秒(。

鉴于这些发现,在我看来很明显,问题必须来自特定于System.Net.HttpWebRequest类实现的东西......

Web应用程序本身托管在IIS Express上,但我很确定这是无关紧要的,因为上述请求永远不会到达Web服务器(我通过从命令行运行IIS Express然后检查通过的请求以及每个ProcessMonitor来检查(。

更多信息:我正在运行 Win 8.1 64 位和 VS 2013 SP4 专业版。系统的 HOST 文件未修改,即它不包含任何条目。

到目前为止我尝试过的事情:

  • 在管理员模式下运行 VS
  • 关闭所有防火墙和防病毒软件
  • 使用 IIS 而不是 IIS Express
  • 将代理设置显式设置为空,包括每个代码和每个配置
  • 检查每个进程监视器的IIS Express进程 - 没有结果(正如我所说,我很确定Web服务器没有直接参与此问题(
  • localhost更改为127.0.0.1

我不明白问题是什么,在网上也找不到任何相关信息。我什至没有任何想法可以尝试追踪错误。换句话说:我完全被困在这个上面,它有效地阻止了我针对本地托管的网络编写任何集成测试。任何帮助/提示/提示都非常感谢。

Web 请求失败,但仅适用于本地主机和使用 System.Net.HttpWebRequest 时

只是为了检查这部分:"通过检查 .NET 代码,我将错误追踪到 WSAConnect API 返回非空值,但我看不出这有多大帮助。(但是,这是一个 32 位 API,而我在 64 位系统上运行。会不会有一些奇怪的32/64位问题?

确保在 IIS 中,对于应用程序池,已启用 32 位(默认值为禁用(。

另外,我假设绑定设置正确。(最后一部分[绑定]应该是评论,但我没有代表 - 它被删除了,显然 - 或者将是(