दिलचस्प पोस्ट
मॉड्यूल '../build/Release/bson'] कोड नहीं मिल सकता है: 'MODULE_NOT_FOUND'} js-bson: शुद्ध जेएस संस्करण का उपयोग कर, सी + + बीएसएन एक्सटेंशन लोड करने में विफल आप सी में लिनक्स पर गैर-अवरुद्ध कंसोल I / O कैसे करते हैं? त्रुटि: फोनगैप में श्वेतसूची अस्वीकृति बहु-उपयोगकर्ता पहुंच के लिए एक MS-Access DB सेट करना एंड्रॉइड में एक स्ट्रिंग और सबस्क्रिप्ट एकाधिक पंक्तियों को एक अल्पविराम-पृथक मान केवल एक संख्या और एक प्रतीक (-) को JTextField में टाइप करने की अनुमति देता है शीर्षक के लिए UITableViewRowAction छवि Onclick / onchange ईवेंट से HTML चेकबॉक्स का मूल्य प्राप्त करना छवि दृश्य में फ्लिंग इशारे जोड़ना – एंड्रॉइड HTTP त्रुटि 500.22 – आंतरिक सर्वर त्रुटि (एक asp.net सेटिंग का पता लगाया गया है जो एकीकृत प्रबंधित पाइपलाइन मोड में लागू नहीं होता है।) किसी मैट्रिक्स या डेटा फ्रेम की हर पंक्ति में फ़ंक्शन लागू करें AppCompat v21 का उपयोग करते हुए, एंड्रॉइड में फ्लोटिंग एक्शन बटन (एफएबी) कैसे बनाएं? डॉक करने वाले शेयरों के लिए अनुमतियों का प्रबंधन करने का सबसे अच्छा तरीका क्या है क्या आईओएस में गोपनीयता सेटिंग्स रीसेट करना संभव है?

वेबएपीआई क्लाइंट में प्रति कॉल एक नया एचटीटीपी क्लायंट बनाने के ऊपर क्या है?

वेबपीआई क्लाइंट के एचटीटीपी क्लाइंट का जीवनकाल क्या होना चाहिए?
क्या एकाधिक कॉल के लिए HttpClient का एक उदाहरण होना बेहतर है?

हर अनुरोध के लिए एचटीटीपी HttpClient बनाने और उसका निपटान करने के लिए ओवरहेड क्या है, जैसे नीचे दिए गए उदाहरण ( http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from/ -ए-नेट-क्लाइंट ):

 using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:9000/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // New code: HttpResponseMessage response = await client.GetAsync("api/products/1"); if (response.IsSuccessStatusCode) { Product product = await response.Content.ReadAsAsync>Product>(); Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); } } 

Solutions Collecting From Web of "वेबएपीआई क्लाइंट में प्रति कॉल एक नया एचटीटीपी क्लायंट बनाने के ऊपर क्या है?"

HttpClient को कई कॉल्स के लिए फिर से इस्तेमाल करने के लिए डिज़ाइन किया गया है। यहां तक ​​कि कई धागे में भी। HttpClientHandler पास क्रेडेंशियल्स और कूकीज हैं, जिन्हें कॉल के दौरान दोबारा इस्तेमाल किया जा सकता है। एक नया HttpClient उदाहरण होने के लिए उस सभी चीजों को फिर से सेट करना आवश्यक है। इसके अलावा, DefaultRequestHeaders संपत्ति में वे गुण हैं जो बहु कॉल के लिए हैं। प्रत्येक अनुरोध पर उन मूल्यों को रीसेट करने के बाद बिंदु को हराया जाता है

HttpClient का एक अन्य प्रमुख लाभ HttpMessageHandlers को क्रॉस कटिंग चिंताओं को लागू करने के लिए अनुरोध / प्रतिक्रिया पाइपलाइन में जोड़ने की क्षमता है। ये लॉगिंग, ऑडिटिंग, थ्रॉटलिंग, रीडायरेक्ट हैंडलिंग, ऑफ़लाइन हैंडलिंग, मैट्रिक्स कैप्चरिंग के लिए हो सकते हैं। विभिन्न प्रकार के सभी प्रकार यदि एक नया एचटीटीपी क्लाइंट प्रत्येक अनुरोध पर बनाया गया है, तो ये सभी संदेश हैंडलर को प्रत्येक अनुरोध पर सेटअप करने की जरूरत है और किसी भी तरह के अनुप्रयोग स्तर की स्थिति जो इन हैंडलरों के अनुरोधों के बीच साझा की गई है उन्हें भी प्रदान करना होगा।

जितना अधिक आप HttpClient की सुविधाओं का उपयोग करते हैं, उतना ही आप देखेंगे कि एक मौजूदा उदाहरण का पुन: उपयोग करना समझ में आता है।

हालांकि, मेरी राय में, सबसे बड़ा मुद्दा यह है कि जब HttpClient क्लास का निपटान होता है, तो यह एचटीटीपी HttpClientHandler निपटारा HttpClientHandler , जो तब ServicePointManager द्वारा प्रबंधित किए जाने वाले कनेक्शन के पूल में जबरन TCP/IP कनेक्शन को बंद कर देता है। इसका अर्थ है कि एक नया HttpClient साथ प्रत्येक अनुरोध के लिए एक नया TCP/IP कनेक्शन पुनः स्थापित करना आवश्यक है।

मेरे परीक्षणों से, एक लैन पर सादे HTTP का उपयोग करते हुए, प्रदर्शन हिट काफी नगण्य है। मुझे यह संदेह है क्योंकि वहां एक अंतर्निहित टीसीपी कूपलिव है जो कनेक्शन को खुले रखता है, तब भी जब HttpClientHandler इसे बंद करने की कोशिश करता है

इंटरनेट पर जाने वाले अनुरोधों पर, मैंने एक अलग कहानी देखी है हर बार अनुरोध को फिर से खोलने के कारण मैंने 40% प्रदर्शन हिट देखा है

मुझे संदेह है कि एक HTTPS कनेक्शन पर हिट भी बदतर होगा

मेरी सलाह है कि एचटीटीपी क्लाइंट का एक अलग एपीआई के लिए अपने आवेदन के जीवनकाल के लिए रखना है जिसे आप कनेक्ट करते हैं।

यदि आप अपना आवेदन स्केल करना चाहते हैं, तो अंतर बड़ा है! लोड के आधार पर, आप बहुत भिन्न प्रदर्शन संख्या देखेंगे। जैसा Darrel मिलर का उल्लेख है, HttpClient सभी अनुरोधों के दौरान फिर से इस्तेमाल किया जा करने के लिए बनाया गया था। इसे बीसीएल टीम के लोगों ने इसकी पुष्टि कर ली थी, जिन्होंने इसे लिखा था।

मुझे हाल ही में एक प्रोजेक्ट था जो कुछ नए सिस्टमों के लिए ब्लैक फ्राइडे / हॉलिडे ट्रैफ़िक के लिए बहुत बड़े और प्रसिद्ध ऑनलाइन कंप्यूटर रिटेलर स्केल के लिए सहायता करना था। हम HttpClient के उपयोग के आसपास कुछ प्रदर्शन समस्याओं में भाग गए I चूंकि यह IDisposable लागू करता है, devs ने किया था जो आप आमतौर पर एक उदाहरण बनाने और इसे एक using() कथन using() अंदर रखकर करते हैं। एक बार जब हम एप्लिकेशन का परीक्षण लोड करना शुरू कर दिया तब सर्वर ने घुटनों पर लाया – हाँ, सर्वर केवल ऐप नहीं है इसका कारण यह है कि एचटीटीपी क्लाइंट का हर उदाहरण सर्वर पर एक पोर्ट खोलता है गैर-नियतात्मक जीसी के अंतिम रूप देने और तथ्य यह है कि आप कंप्यूटर संसाधनों के साथ काम कर रहे हैं जो कई ओएसआई परतों में फैले हुए हैं , बंद करने के लिए नेटवर्क बंदरगाहों को थोड़ी देर लग सकता है असल में विंडोज़ ओएस स्वयं बंदरगाह (माइक्रोसॉफ्ट के लिए) को बंद करने के लिए 20 सेकेंड तक ले सकता है। हम बंदरगाहों को बंद कर सकते हैं जितना तेजी से बंद कर रहे थे – सर्वर बंदरगाह थकावट, जो सीपीयू को 100% छीन लिया मेरा फिक्स एचटीटीपी क्लाइंट को एक स्थिर आवृत्ति में बदलना था जो समस्या को हल करता था। हां, यह एक डिस्पोजेबल संसाधन है, लेकिन प्रदर्शन में अंतर के कारण किसी भी ऊपरी हिस्से को बहुत अधिक है। मैं आपको कुछ लोड परीक्षण करने के लिए प्रोत्साहित करता हूं कि यह देखने के लिए कि आपका ऐप कैसे व्यवहार करता है

आप https://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client पर दस्तावेज़ और उदाहरण के लिए WebAPI मार्गदर्शन पृष्ठ भी देख सकते हैं

इस कॉल-आउट पर विशेष ध्यान दें:

एचटीटीपी क्लायंट का इरादा है कि किसी एक आवेदन के पूरे जीवन में एक बार इन्स्टिटिशन किया गया हो। विशेष रूप से सर्वर अनुप्रयोगों में, हर अनुरोध के लिए एक नया एचटीटीपी क्लाइंट इंस्टालेशन बनाने से भारी भार के तहत उपलब्ध सॉकेट्स की संख्या समाप्त होगी। इसका परिणाम SocketException त्रुटियों में होगा।

यदि आपको लगता है कि आपको अलग-अलग हेडर, आधार पता, आदि के साथ एक स्थिर HttpClient का उपयोग करने की ज़रूरत है तो आपको क्या करने की आवश्यकता होगी। HttpRequestMessage मैन्युअल रूप से बनाने और उन मानों को HttpRequestMessage पर सेट करना है उसके बाद, HttpClient:SendAsync(HttpRequestMessage requestMessage, ...) उपयोग करें HttpClient:SendAsync(HttpRequestMessage requestMessage, ...)

उच्च मात्रा वेब साइटों से संबंधित है लेकिन सीधे एचटीटीपी क्लाइंट के लिए नहीं। हमारे पास हमारी सभी सेवाओं में नीचे दिए गए कोड का स्निपेट है

 // number of milliseconds after which an active System.Net.ServicePoint connection is closed. const int DefaultConnectionLeaseTimeout = 60000; ServicePoint sp = ServicePointManager.FindServicePoint(new Uri("http://<yourServiceUrlHere>")); sp.ConnectionLeaseTimeout = DefaultConnectionLeaseTimeout; 

https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(System.Net.ServicePoint.ConnectionLeaseTimeout).k(TargetFrameworkMoniker-.NETFramework , Version% 3Dv4.5.2) से; कश्मीर (DevLang-कोई तिथि नहीं) & rd = सच

"आप इस संपत्ति का उपयोग यह सुनिश्चित करने के लिए कर सकते हैं कि एक सर्विसपॉइंट ऑब्जेक्ट के सक्रिय कनेक्शन अनिश्चित समय तक खुला नहीं रहें। यह संपत्ति ऐसे परिदृश्यों के लिए बनाई गई है जहां कनेक्शन को समय-समय पर हटा दिया जाना चाहिए, जैसे लोड संतुलन परिदृश्य

डिफ़ॉल्ट रूप से, जब KeepAlive अनुरोध के लिए सच होता है, तो मैक्स इडले टाइम संपत्ति निष्क्रियता के कारण सेवापॉइंट कनेक्शन को बंद करने के लिए टाइम-आउट सेट करती है। यदि सर्विसपॉइंट सक्रिय कनेक्शन है, तो मैक्स इडले टाइम का कोई प्रभाव नहीं है और कनेक्शन अनिश्चितकाल तक खुला रहता है।

जब ConnectionLeaseTimeout गुण 1 से दूसरे के मान पर सेट है, और निर्दिष्ट समय बीत जाने के बाद, एक अनुरोध है कि अनुरोध में KeepAlive को गलत सेट करके एक सर्विस सर्विस के बाद एक सक्रिय सेवापॉइंट कनेक्शन बंद है। यह मान सेट करना सेवापॉइंट ऑब्जेक्ट द्वारा प्रबंधित सभी कनेक्शन को प्रभावित करता है। "

जब आपके पास एक सीडीएन या अन्य समापन बिंदु के पीछे सेवाएं होती हैं जो आप विफल हो जाना चाहते हैं तो यह सेटिंग कॉल करने वालों को आपके नए गंतव्य पर आपकी सहायता करती है। इस उदाहरण में एक फेलओवर के बाद 60 सेकंड बाद सभी कॉल करने वाले को नए समापन बिंदु से पुन: कनेक्ट करना चाहिए। यह आवश्यक है कि आप अपनी निर्भर सेवाओं (उन सेवाओं को जिन्हें आप कहते हैं) और उनके समापन बिंदुओं को जानते हैं।

अन्य उत्तर राज्य के रूप में, HttpClient पुनः उपयोग के लिए है हालांकि, बहु-थ्रेडेड अनुप्रयोग में एक एकल BaseAddress इंस्टेंस का पुन: उपयोग करने का अर्थ है कि आप अपने स्टेटफुल गुणों के मूल्यों को बदल नहीं सकते, जैसे BaseAddress और BaseAddress (ताकि आप उन्हें केवल तब ही उपयोग कर सकें जब वे आपके आवेदन में स्थिर हों)।

इस सीमा को प्राप्त करने के लिए एक दृष्टिकोण GetAsync उस वर्ग के साथ लपेटते हुए है जो आपको सभी GetAsync विधियों की जरूरत है ( GetAsync , PostAsync आदि) डुप्लिकेट करता है और उन्हें सिंगलटन PostAsync GetAsync में PostAsync । हालांकि यह बहुत थकाऊ है (आपको एक्सटेंशन विधियों को भी लपेटने की आवश्यकता होगी), और सौभाग्य से वहाँ एक और तरीका है – नया HttpClient उदाहरण बनाते रहें, लेकिन अंतर्निहित HttpClientHandler पुन: उपयोग करें बस सुनिश्चित करें कि आप हैंडलर का निपटान नहीं करते हैं:

 HttpClientHandler _sharedHandler = new HttpClientHandler(); //never dispose this HttpClient GetClient(string token) { //client code can dispose these HttpClient instances return new HttpClient(_sharedHandler, disposeHandler: false) { DefaultRequestHeaders = { Authorization = new AuthenticationHeaderValue("Bearer", token) } }; } 

आप साइमन टिम्स द्वारा इस ब्लॉग पोस्ट को भी संदर्भित करना चाह सकते हैं: https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

लेकिन HttpClient अलग है। हालांकि यह IDisposable इंटरफ़ेस लागू करता है, हालांकि यह वास्तव में एक साझा ऑब्जेक्ट है। इसका मतलब यह है कि कवर के नीचे यह रीएन्ट्रेंट है) और थ्रेड सुरक्षित है। प्रत्येक निष्पादन के लिए HttpClient का एक नया उदाहरण बनाने के बजाय आपको आवेदन के पूरे जीवनकाल के लिए HttpClient का एक उदाहरण साझा करना चाहिए। चलिए देखते हैं क्यों