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文件未经修改,即它不包含任何条目。
到目前为止我尝试过的事情:
localhost
更改为127.0.0.1
我不明白问题是什么,我在网上找不到任何相关信息。我甚至没有更多的想法,我可以尝试追踪错误。换句话说:我完全坚持这一点,它有效地阻止我编写针对本地托管网站的任何集成测试。任何帮助/提示/提示都非常受欢迎。
答案 0 :(得分:0)
只是检查这部分: "通过检查.NET代码,我将错误跟踪到WSAConnect API返回一个非空值,但我无法看到这有很大帮助。 (但是,这是一个32位API,而我在64位系统上运行。可能会出现一些奇怪的32 / 64bit问题吗?)"
确保在IIS中,对于应用程序池,您已启用32位(默认为禁用)。
另外,我假设绑定设置正确。 (最后一部分[绑定]应该是一个评论,但我没有代表 - 它被删除了,显然 - 或将会被删除)