C # Cómo configurar HttpClient Keep-Alive en falso
Tuve un problema de bajo rendimiento con las solicitudes HTTP en .NET. La solicitud HTTP GET a una API REST en el host local tardó unos 500 ms en completarse. Pasé mucho tiempo para arreglarlo. He intentado de muchas maneras:HttpClient
, HttpWebRequest
, WebClient
yRestSharp
. Ninguno de ellos funciona. Se dice que la mayoría de las soluciones en Internet establecenProxy
parámetro anull
pero aun así no funcionará más rápido.
La única forma que encontré para reducir este tiempo es establecer el parámetro Keep-Alive de la solicitud en falso:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Esto funciona muy bien. El tiempo se reduce a 7-10 ms. Pero ahora, por alguna razón, necesito usarHttpClient
en lugar deHttpWebRequest
. Y no puedo encontrar cómo configurar Keep-Alive en falso paraHttpClient
. Lo único que encontré es cómo configurarlo como verdadero estableciendo un encabezado de "conexión" en "Keep-Alive".
Estoy usando este código para la solicitud POST de HttpClient:
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);
Y todavía tarda unos 500-600 ms en completarse.