मैं .NET System.Net.Http.HttpClient
का उपयोग कर हेरोकू एपीआई के साथ प्रयोग कर रहा हूं। विशेष रूप से, मुझे काम करने के लिए keep-alive
चाहिए ताकि मैं एक टीसीपी कनेक्शन का उपयोग करके कई HTTP अनुरोध भेज सकूं और प्रति अनुरोध एसएसएल हैंडशेक के साथ एक टीसीपी कनेक्शन स्थापित करने के बजाय केवल एक एसएसएल हैंडशेक कर सकता हूं।कनेक्शन कुछ जीवों पर System.Net.Http.HttpClient के साथ काम नहीं कर रहा है
मैं https://api.heroku.com/status के खिलाफ परीक्षण कर रहा हूं जो एक अच्छा HTTP 200 देता है, और टीसीपी यातायात की निगरानी के लिए वायरशर्क का उपयोग करता है।
Google क्रोम, अपाचेबेन्च (-k
ध्वज के साथ) और कर्ल सभी एक टीसीपी कनेक्शन खोलने और एकाधिक अनुरोध भेजने में सक्षम होने लगते हैं। HttpClient, इतना नहीं। मैं भी (HttpClient अन्य मेजबान के खिलाफ परीक्षण किया है जैसे। https://google.com/ और वहाँ मैं केवल एक एसएसएल हाथ मिलाना/टीसीपी सेटअप देखते हैं। तो ऐसा लगता है यह HttpClient और Heroku एपीआई के बीच एक बुरी बातचीत है जैसे।
यहाँ कोड मैं परीक्षण हूँ साथ:
private static async void TestUrl(string url)
{
using (var client = GetClient())
{
await client.GetAsync(url);
await client.GetAsync(url);
await client.GetAsync(url);
await client.GetAsync(url);
}
}
private static HttpClient GetClient()
{
var requestHandler = new HttpClientHandler
{
UseCookies = false,
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
};
return new HttpClient(requestHandler);
}
मैं भी दिखा कैसे HttpClient रूप में जल्द ही पुनर्स्थापित करने के लिए (RST
) कनेक्शन के रूप में यह डेटा प्राप्त किया है फैसला करता है एक Wireshark स्क्रीनशॉट संलग्न कर रहा हूँ
यहां क्या हो रहा है के लिए कोई सुझाव?
फिडलर क्या दिखाता है? यदि वे HTTP 1.0 पर बातचीत करते हैं, तो आपको एक स्पष्ट Keep-Alive शीर्षलेख की आवश्यकता है। –
@StephenCleary Google क्रोम HTTP/1.1 – friism
दिखाता है जिसका अर्थ है 'एचटीपी क्लाइंट' और हेरोोकू के बीच। –