2016-04-01 36 views
9

.NET'deki HTTP istekleriyle düşük performans sorunu yaşadım. Localhost'ta bir REST API'sine yapılan HTTP GET isteğinin tamamlanması yaklaşık 500 ms sürdü. Düzeltmek için çok zaman harcadım. Birçok yolu denedim: HttpClient, HttpWebRequest, WebClient ve RestSharp. Hiçbiri işe yaramıyor. İnternetteki çoğu çözüm, Proxy parametresini null olarak ayarlamayı söyledi ancak yine de daha hızlı çalışmayacak.C# HttpClient Keep-Alive öğesi false olarak ayarlanır

bu süreyi azaltmak için bulunan tek yolu false isteğin Keep-Alive parametreyi ayarlamaktır:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.Method = "GET"; 
request.KeepAlive = false; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Bu iyi çalışıyor. Zaman, 7-10 ms'ye düşürüldü. Ama şimdi bazı nedenlerle HttpWebRequest yerine HttpClient kullanmam gerekiyor. Ve Keep-Alive öğesini HttpClient için yanlış olarak nasıl ayarlayacağımı bulamıyorum. Bulduğum tek şey "Keep-Alive" e "bağlantı" başlığı ayarlayarak bunu true olarak nasıl ayarlayacağınızdır.

 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); 

Ve hala tamamlanması yaklaşık 500-600 ms alır:

Ben HttpClient tarafından POST isteği için bu kodu kullanıyorum.

+0

http://stackoverflow.com/questions/15211812/using-a-keep-alive-connection-in-winrts-httpclient-class ... sadece bir fikir ... –

+0

@AndreasNiedermair Teşekkürler, bu bir ilk Google arama sonucundaki bağlantıyı tıklayın. Bunu zaten denedim: content.Headers.Add ("Keep-Alive", "false"); Ancak bu işlemin tamamlanması için 500 ms'den daha uzun sürüyor. – Vaskrol

cevap

1
aşağıda

bakınız kodu:

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

Çalışmıyor. Koduyla bir soru güncelledim. – Vaskrol

+0

"Harika çalışıyor" ifadesini gönderdiğiniz örnek KeepAlive = False değerine eşittir. Denediğiniz eyalet başlığı, KeepAlive = True değerine eşittir. Yapman gerekenlerin tam tersini yapıyorsun. – Matt

16

üstbilgi kümesidir HttpWebRequest.KeepAlive = true ayarlandığında Bağlantı: canlı tutma sen Connection HttpWebRequest.KeepAlive = false başlık seti olup ayarladığınızda

: yakın

Yani

'e ihtiyacınız olacak