Web请求失败,但仅适用于localhost和使用System.Net.HttpWebRequest时

时间:2014-12-10 05:45:43

标签: c# httpwebrequest localhost

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 / 64bit问题?)

当我使用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 64位和VS 2013 SP4专业版。 系统的HOST文件未经修改,即它不包含任何条目。

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

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

我不明白问题是什么,我在网上找不到任何相关信息。我甚至没有更多的想法,我可以尝试追踪错误。换句话说:我完全坚持这一点,它有效地阻止我编写针对本地托管网站的任何集成测试。任何帮助/提示/提示都非常受欢迎。

1 个答案:

答案 0 :(得分:0)

只是检查这部分: "通过检查.NET代码,我将错误跟踪到WSAConnect API返回一个非空值,但我无法看到这有很大帮助。 (但是,这是一个32位API,而我在64位系统上运行。可能会出现一些奇怪的32 / 64bit问题吗?)"

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

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