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

Tho*_*ler 7 c# localhost httpwebrequest

我有一个非常奇怪的问题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();
}
Run Code Online (Sandbox Code Playgroud)

..大部分时间都会因此异常而失败:

System.Net.WebException:无法连接到远程服务器
----> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应或建立连接失败,因为连接的主机未能回复127.0.0.1:64497

通过检查.NET代码,我将错误跟踪到WSAConnect API返回一个非null值,但我看不出这有多大帮助.(但是,这是一个32位API,而我在64位系统上运行.可能有一些奇怪的32/64bit问题吗?)

当我使用localhost之外的地址(例如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
  • 将代理设置显式设置为null,每个代码和每个配置
  • 检查每个ProcessMonitor的IIS Express进程- 没有结果(正如我所说,我很确定Web服务器没有直接涉及这个问题)
  • localhost127.0.0.1

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

小智 0

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

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

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