【发布时间】:2016-04-01 13:44:20
【问题描述】:
我在 .NET 上遇到了 HTTP 请求性能低下的问题。对 localhost 上的 REST API 的 HTTP GET 请求大约需要 500 毫秒才能完成。我花了很多时间来修复它。我尝试了很多方法:HttpClient、HttpWebRequest、WebClient 和RestSharp。它们都不起作用。网上大部分解决方案都说将Proxy参数设置为null,但还是不行。
我发现减少这个时间的唯一方法是将request的Keep-Alive参数设置为false:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
这很好用。时间减少到 7-10 毫秒。但现在出于某些原因,我需要使用HttpClient 而不是HttpWebRequest。而且我找不到如何将 HttpClient 的 Keep-Alive 设置为 false。我发现的唯一一件事是如何通过将“连接”标头设置为“保持活动”来将其设置为 true。
我正在将此代码用于 HttpClient 的 POST 请求:
HttpClient _http = new HttpClient();
_http.DefaultRequestHeaders.Accept.Clear();
_http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
_http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
var content = new StringContent(
request, Encoding.UTF8, "application/%appname%+xml");
content.Headers.ContentType.Parameters.Add(
new NameValueHeaderValue("type", "payload"));
HttpResponseMessage response = await _http.PostAsync(uri, content);
而且仍然需要大约 500-600 毫秒才能完成。
【问题讨论】:
-
stackoverflow.com/questions/15211812/… ...只是一个想法...
-
@AndreasNiedermair 谢谢,这是 Google 搜索结果中的第一个链接。我已经尝试过了: content.Headers.Add("Keep-Alive", "false");但这也需要 500 多毫秒才能完成。
标签: c# .net rest httpclient httpwebresponse