मेरे पास एएसपीनेट एमवीसी वेबसाइट है जो इसके डेटा प्राप्त करने के लिए एक अतिरिक्त एपीआई का उपभोग कर रही है। मैं अनुरोध करने के लिए एसिंक्रोनस कार्यों का उपयोग कर रहा हूं क्योंकि प्रत्येक पृष्ठ पर कई लोग हो सकते हैं। अपटाइम के कुछ समय बाद वेबसाइट डेटा प्राप्त करने का प्रयास करते समय निम्न त्रुटि फेंक रही है।HttpClient.GetAsync को कॉल करने में त्रुटि: अंतर्निहित कनेक्शन बंद किया गया था
अंतर्निहित कनेक्शन बंद था: प्रेषण पर एक अनपेक्षित त्रुटि हुई।
मैंने पढ़ा है कि यह web.config पर अधिकतम कनेक्शन सेटिंग्स के कारण हो सकता है लेकिन इसे बढ़ाना बहुत अंतर नहीं लग रहा है।
मैं एपीआई पर लोड को कम करने के लिए कैशिंग का भी उपयोग कर रहा हूं। कार्य कैश किया गया है ताकि परिणाम बाद में उपयोग किया जा सके।
एकमात्र तरीका जिसे मैंने ठीक करने के लिए पाया है वह एप्लिकेशन पूल रीसाइक्लिंग करके है। किसी भी सहायता की सराहना की जाएगी।
/* Code from page_load */
var currenciesTask = ApiClient.GetAsync<CurrencyListWrapper>("currencies");
var blogArticleTask = ApiClient.GetAsync<BlogArticleListWrapper>("blog/articles", "limit=10");
var seoPageTask = ApiClient.GetAsync<SEOPageListWrapper>("seopages");
await Task.WhenAll(currenciesTask, blogArticleTask, seoPageTask);
/* Code from data access later */
public class ApiClient : HttpClient
{
public static Task<T> GetAsync<T>(string operation, string query = null, bool cache = true)
{
// Check if task is in cache
string cacheName = null;
if (cache)
{
cacheName = String.Format("{0}_{1}_{2}", operation, query ?? String.Empty, App.GetLanguage());
var cachedTask = HttpRuntime.Cache[cacheName];
if (cachedTask != null)
{
return (Task<T>)cachedTask;
}
}
// Get data task
var task = GetAsyncData<T>(operation, query);
// Add to cache if required
if (task != null && cache)
{
App.AddToCache(cacheName, task);
}
return task;
}
public static async Task<T> GetAsyncData<T>(string operation, string query = null)
{
using (ApiClient client = new ApiClient())
{
string url;
if (query != null)
{
url = String.Format("{0}?{1}", operation, query);
}
else
{
url = String.Format("{0}", operation);
}
var response = await client.GetAsync(url);
return (await response.Content.ReadAsAsync<T>());
}
}
}
यह त्रुटि आईआईएस से उत्पन्न होती है। अधिकांश समय यह कुछ विशिष्ट है जो प्रोटोकॉल के साथ गड़बड़ करता है। कारण एसएसएल से संबंधित या फ्रेमवर्क संगतता हो सकते हैं ... ** जोड़े प्रश्न **: ** 1) ** क्या आप एसएसएल का उपयोग कर रहे हैं? ** 2) ** आईआईएस में आपके ऐप पूल का नेट का कौन सा संस्करण उपयोग करता है? –
उत्तर के लिए धन्यवाद। हां हम वेबसाइट पर एसएसएल का उपयोग कर रहे हैं और जिस वेब सेवा से कनेक्ट हो रहा है। एप्लिकेशन पूल .Net v4.0.30319 का उपयोग कर रहा है। – markvpc
अपने प्रमाण पत्र की जांच करें, आईआईएस के साथ आपका प्रमाण पंजीकरण, बाइंडिंग की जांच करें। अगर सब ठीक लग रहा है तो आप प्रमाण को हटाने और पुनः पंजीकरण करने का भी प्रयास कर सकते हैं। मुझे संदेह है कि यह प्रोटोकॉल द्वारा उलझन में है। प्रोटोकॉल की समस्याएं अतिरिक्त हैंडशेक का कारण बनती हैं और ज़ोंबी के लिए लीड का अनुरोध करती हैं। –