2009-01-20 9 views
5

मुझे पता है कि यह एक अस्पष्ट सवाल है, खासकर जब से मैं कोई कोड नहीं दे रहा हूं, लेकिन मैं एक .NET 2.0 एप्लिकेशन विकसित कर रहा हूं, और हमारे पास एक वेबरक्वेट है जो आंतरिक रूप से निर्मित एपीआई को डेटा पोस्ट करता है।HttpWebRequests बाद के कॉल पर विफल रहा

अजीब चीज हमारे तीसरे (और हमेशा तीसरे) बाद के अनुरोध पर होती है जो अनुरोध की GetRequestStream() विधि में विफल होती है। पहली और दूसरी बार इसे बुलाया गया, सब ठीक है। तीसरे समय, यह थोड़ी देर के लिए लटका हुआ है और अंत में बाहर निकलता है।

एपीआई को अन्य अनुप्रयोगों द्वारा घर में बुलाया जा रहा है, इसलिए हम इसे सर्वर-साइड या नेटवर्किंग समस्या नहीं जानते हैं। हमने कई मशीनों पर कोशिश की है - जिनमें से सभी एक ही समस्या है। क्या किसी को पहले कभी इस समस्या का सामना करना पड़ा है, या किसी को भी डीबग करने के बारे में कोई परेशानी है (क्योंकि प्रतिक्रिया वस्तु कुछ भी कम नहीं करती है, या कम से कम कुछ भी उपयोगी नहीं है)।

उत्तर

18

आमतौर पर ऐसा होता है यदि आप WebResponse का निपटारा नहीं कर रहे हैं। क्लाइंट से उसी मशीन पर कनेक्शन की संख्या पर लागू एक सीमा है, और डिफ़ॉल्ट रूप से यह दो है। यदि आप WebResponse बंद करते हैं तो कनेक्शन को पुन: उपयोग किया जा सकता है (या बंद)। उपयोग कथन यहां आपका मित्र है:

WebRequest request = [...]; 
// Do stuff with the request stream here (and dispose it) 
using (WebResponse response = request.GetResponse()) 
{ 
    // Stuff with the response 
} 
+0

मैंने कोशिश की, लेकिन उपयोग करने का दृष्टिकोण मेरे लिए बिल्कुल काम नहीं करता था। वही समस्या ... – Ted

+0

@Ted: इससे पता चलता है कि यह सिर्फ एक अलग कारण है ... –

+1

अच्छा, यह वास्तव में नहीं है। यह वही समस्या है। और यह HTTP 1.0 का उपयोग करने के अनुरोध को बताकर "हल" किया गया था, 1.1 नहीं। यहां देखें: http://stackoverflow.com/a/8384691/178143 – Ted

1

हाँ, आपका बिल्कुल सही अधिकार है। प्रतिक्रिया ठीक से निपटान नहीं किया जा रहा था। हम इसे कचरा कलेक्टर तक छोड़ रहे थे, जिसे आपने अनुमान लगाया था, समय पर एकत्र नहीं किया जा रहा था। दुर्भाग्य से, मैंने अपना ब्राउज़र बंद कर दिया और किसी भी उत्तर को पढ़ने के लिए भूल गए (lol आपको कितना बेवकूफ लगता है मुझे लगता है कि मुझे लगता है) और समस्या हल हो गई है।

मैंने आज रात 2 चीजें सीखी हैं। 1, अपने WebRequests का सही ढंग से निपटान; और 2, जवाब देने के लिए अधिक सावधानी बरतें!

+0

मुख्य बात यह है कि * कभी भी * कचरा कलेक्टर पर निर्भर न हो जो IDISposable लागू करने वाली चीजों को अंतिम रूप देने के लिए भरोसा करता है लेकिन आपको * पता नहीं है * सुरक्षित (जैसे मेमोरीस्ट्रीम)। –

संबंधित मुद्दे