2016-04-01 4 views
9

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.

+0

http://stackoverflow.com/questions/15211812/using-a-keep-alive-connection-in-wwrts-httpclient-class ... nur eine Idee ... –

+0

@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

Antwort

1

Siehe Code unten:

HttpClient cli; 
... 
cli.DefaultRequestHeaders.Add("Connection", "keep-alive"); 
cli.DefaultRequestHeaders.Add("Keep-Alive", "600"); 
+0

Es funktioniert nicht. Ich habe eine Frage mit meinem Code aktualisiert. – Vaskrol

+0

Das Beispiel, das Sie gepostet haben, das "großartig funktioniert" entspricht KeepAlive = False. Die von Ihnen angegebene Kopfzeile entspricht KeepAlive = True. Sie tun das Gegenteil von dem, was Sie tun müssen. – Matt

16

Beim Einrichten HttpWebRequest.KeepAlive = true der Kopfsatz Connection: keep-alive

Wenn Sie setzen HttpWebRequest.KeepAlive = false der Kopfsatz Anschluss: schließen

So benötigen Sie

_http.DefaultRequestHeaders.Add("Connection", "close"); 
Verwandte Themen