2014-02-11 184 views
1

我有一个小样本来测试HttpClient。代码如下。问题在于,大多数时候,请求失败,超时或主机没有及时响应。同一个请求始终在浏览器中运行。当它发生时,需要很长时间。HttpClient非常缓慢的请求本地主机,甚至失败

有趣的是,通过浏览器访问相同的网址始终没有问题。从另一台机器执行相同的代码也会同时运行。

当使用HttpClient访问localhost时,这个问题的原因是什么? 如何解决?

const string url = "http://localhost:12000/konnect/sync/adverts/status"; 
var handler = new HttpClientHandler(); 
handler.Proxy = null; 
handler.UseProxy = false; 
var client = new HttpClient(handler); 
client.GetStringAsync(url).Result.Dump(); 
+0

当你把它叫做'await client.GetStringAsync(url)''时会发生什么? –

回答

4

事实证明,这与图书馆没有任何关系,因为大多数情况下,通常与本地主机有关的请求都会失败。当涉及到本地主机时,这可能是系统的问题。无论如何,我禁用了IPv6,但它仍然无法工作。

然而,最有效的是rawcap。我意识到,当我运行rawCap来监视127.0.0.1时,所有的呼叫都成功完成。看起来它确实纠正了这个问题。希望它能帮助那些也与本地主机有同样问题的人。

+0

我有完全相同的问题(请参阅[这里](http://stackoverflow.com/questions/27394068/web-request-fails-but-only-for-localhost-and -when-using-system-net-httpwebreque)),事实上rawCap有一点帮助,但它仍然非常慢 - 比从另一个客户端发出请求慢得多。有什么想法在幕后发生了什么? –

0

只是一个想法...打开Windows Lan设置,并取消选中“自动检测设置”。我最近面临类似的问题,并通过贬低此设置来解决问题。

+0

是的。我从之前的文章中读到并尝试过。一样。我下载了curl,并且我得到了类似的行为,所以我开始怀疑它与某些地方的某些混乱配置有关。实际上Curl实际上超时了,我意识到在那些时候请求甚至没有达到url。 – ritcoder

+0

我明白了。为了以防万一,请尝试使用调试和发布配置。 – DrinkBird

+0

我使用Linqpad测试应用程序,所以不知道该怎么做。将尝试重新启动,以查看它是否作出differene – ritcoder