Vas*_*rol 22 .net c# rest httpclient httpwebresponse
我在.NET上的HTTP请求有一个低性能问题.对localhost上的REST API的HTTP GET请求大约需要500毫秒才能完成.我花了很多时间来解决它.我曾尝试过很多办法:HttpClient,HttpWebRequest,WebClient和RestSharp.他们都没有工作.互联网上的大多数解决方案都说要设置Proxy参数,null但它仍然无法更快地运行.
我发现减少这个时间的唯一方法是将请求的Keep-Alive参数设置为false:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
这非常有效.时间减少到7-10毫秒.但现在由于某些原因我需要使用HttpClient而不是HttpWebRequest.而且我找不到如何将Keep-Alive设置为false HttpClient.我发现的唯一一件事就是如何通过将"连接"标题设置为"保持活跃"来将其设置为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);
Run Code Online (Sandbox Code Playgroud)
它仍然需要大约500-600毫秒才能完成.
Jer*_*eph 27
设置HttpWebRequest.KeepAlive = true标头集时,Connection为:keep-alive
设置HttpWebRequest.KeepAlive = false标题集时,Connection:close
所以你需要
_http.DefaultRequestHeaders.Add("Connection", "close");
Run Code Online (Sandbox Code Playgroud)
Pav*_*uva 20
使用此代码禁用客户端上的HTTP Keep-Alive:
_http.DefaultRequestHeaders.ConnectionClose = true;
Run Code Online (Sandbox Code Playgroud)
这会将Connection请求标头设置为close.
参见下面的代码:
HttpClient cli;
...
cli.DefaultRequestHeaders.Add("Connection", "keep-alive");
cli.DefaultRequestHeaders.Add("Keep-Alive", "600");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34536 次 |
| 最近记录: |