2016-04-01 9 views
9

पर सेट करने के लिए कैसे करें .NET पर HTTP अनुरोधों के साथ मुझे कम प्रदर्शन समस्या थी। स्थानीयहोस्ट पर एक आरईएसटी एपीआई के HTTP HTTP अनुरोध को पूरा करने के लिए लगभग 500 एमएस लिया गया। मैंने इसे ठीक करने में काफी समय बिताया। मैंने कई तरीकों से प्रयास किया है: HttpClient, HttpWebRequest, WebClient और RestSharp। उनमें से कोई भी काम नहीं करता है। इंटरनेट पर अधिकांश समाधान Proxy पैरामीटर null पर सेट करने के लिए कहा गया है लेकिन यह अभी भी तेज़ी से काम नहीं करेगा।सी # HttpClient Keep-Alive को झूठी

एक ही रास्ता है कि मैं इस समय को कम करने के लिए मिला गलत पर अनुरोध का रखें-जिंदा पैरामीटर सेट करने के लिए है:

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

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

यह महान काम करता है। समय घटाकर 7-10 एमएस कर दिया गया है। लेकिन अब कुछ कारणों से मुझे HttpWebRequest के बजाय HttpClient का उपयोग करने की आवश्यकता है। और मुझे नहीं पता कि Keep-Alive को HttpClient के लिए गलत पर सेट कैसे करें। मुझे मिली एकमात्र चीज यह है कि "Keep-Alive" को "कनेक्शन" हेडर सेट करके इसे सही कैसे सेट करें।

मैं 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); 

और यह अभी भी पूरा करने के लिए 500-600 के बारे में एमएस लेता है।

+0

http://stackoverflow.com/questions/15211812/using-a-keep-alive-connection-in-winrts-httpclient-class ... बस एक विचार ... –

+0

@AndreasNiedermair धन्यवाद, यह पहला है Google खोज परिणाम में लिंक करें। मैंने पहले ही यह कोशिश की है: सामग्री। हेडर। जोड़ें ("Keep-Alive", "false"); लेकिन यह भी पूरा करने के लिए 500 एमएस से अधिक लेता है। – Vaskrol

उत्तर

1
नीचे

देखें कोड:

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

यह काम नहीं करता है। मैंने अपने कोड के साथ एक प्रश्न अद्यतन किया है। – Vaskrol

+0

आपके द्वारा पोस्ट किया गया नमूना "महान काम करता है" KeepAlive = झूठी के बराबर है। आपके द्वारा सुझाए गए हेडर को KeepAlive = True के बराबर है। आप जो करना चाहते हैं उसके विपरीत आप कर रहे हैं। – Matt

16

आप HttpWebRequest.KeepAlive = true सेट करते हैं हैडर सेट है कनेक्शन: जीवित-रखें

आप सेट करते हैं HttpWebRequest.KeepAlive = falseकनेक्शन हैडर सेट है: करीब

तो आपको

की आवश्यकता होगी