Ho avuto un problema di prestazioni basse con richieste HTTP su .NET. La richiesta HTTP GET a un'API REST sull'host locale ha richiesto circa 500 ms per essere completata. Ho passato molto tempo per sistemarlo. Ho provato molti modi: HttpClient
, HttpWebRequest
, WebClient
e RestSharp
. Nessuno di loro funziona. La maggior parte delle soluzioni su Internet ha detto di impostare il parametro su null
ma non funzionerà più velocemente.C# Come impostare HttpClient Keep-Alive su false
L'unico modo che ho trovato per ridurre questa volta è quello di impostare il parametro Keep-Alive di richiesta di falso:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Questa grande opera. Il tempo è ridotto a 7-10 ms. Ma ora per alcune ragioni ho bisogno di usare HttpClient
invece di HttpWebRequest
. E non riesco a trovare come impostare Keep-Alive su false per HttpClient
. L'unica cosa che ho trovato è come impostarlo su true impostando un'intestazione "connection" su "Keep-Alive".
Sto usando questo codice per la richiesta POST da 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);
e ci vogliono ancora circa 500-600 ms per completare.
http://stackoverflow.com/questions/15211812/using-a-keep-alive-connection-in-winrts-httpclient-class ... solo un'idea ... –
@AndreasNiedermair Grazie, questo è un primo link nel risultato di ricerca di Google. Ho già provato questo: content.Headers.Add ("Keep-Alive", "false"); Ma questo richiede anche più di 500 ms. – Vaskrol