Ich hatte ein geringes Leistungsproblem mit HTTP-Anfragen auf .NET. Die HTTP-GET-Anforderung an eine REST-API auf dem lokalen Host dauerte ca. 500 ms. Ich habe viel Zeit damit verbracht, es zu reparieren. Ich habe viele Möglichkeiten ausprobiert: HttpClient
, HttpWebRequest
, WebClient
und RestSharp
. Keine von ihnen funktioniert. Die meisten Lösungen im Internet sagten Proxy
Parameter auf null
, aber es wird immer noch nicht schneller arbeiten.C# Wie setze ich HttpClient Keep-Alive auf false
Die einzige Art, wie ich diese Zeit zu reduzieren gefunden ist, die Keep-Alive-Parameter der Anfrage auf false gesetzt:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Dies funktioniert gut. Die Zeit ist auf 7-10 ms reduziert. Aber jetzt muss ich in einigen Gründen HttpClient
statt HttpWebRequest
verwenden. Und ich kann nicht finden, wie Keep-Alive für HttpClient
auf false festgelegt wird. Das einzige, was ich gefunden habe, ist, wie man es auf wahr setzen kann, indem man eine "Verbindung" -Kopfzeile auf "Keep-Alive" setzt.
Ich verwende diesen Code für POST-Anforderung von 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);
Und es dauert noch ca. 500-600 ms abgeschlossen.
http://stackoverflow.com/questions/15211812/using-a-keep-alive-connection-in-wwrts-httpclient-class ... nur eine Idee ... –
@AndreasNiedermair Danke, das ist ein erstes Link im Google-Suchergebnis Ich habe das schon probiert: content.Headers.Add ("Keep-Alive", "false"); Das dauert aber auch mehr als 500 ms. – Vaskrol