2011-01-06 15 views
10

हम वेब क्लाइंट, .NET 3.5sp1 का उपयोग Winforms एप्लिकेशन में कर रहे हैं। कुछ उपयोगकर्ताओं के लिए यह संदेश संदेश के साथ अपवाद में परिणाम:पुन: उत्पन्न करें "एक कनेक्शन जिसे जिंदा रखा जाने की उम्मीद थी सर्वर द्वारा बंद कर दिया गया था।"

"अंतर्निहित कनेक्शन बंद था: एक कनेक्शन जिसे जीवित रखा जाने की उम्मीद थी सर्वर द्वारा बंद कर दिया गया था।"

सर्च कर रहे हैं वेब के आसपास थोड़ा पता चलता है एक "ठीक" सिर्फ http keepalive है, जो हम वास्तव में करने में रुचि नहीं कर रहे हैं निष्क्रिय करने के लिए, कुछ चलता है कि यह नेट पुस्तकालयों में एक बग हो सकता है, आदि

त्रुटि संदेश से पता चलता है कि यह एक keepaliv'ed http कनेक्शन है जिसे किसी भी तरह से सर्वर (या प्रॉक्सी) द्वारा बंद कर दिया गया है, बिना वेब क्लाइंट के अंतर्निहित के ठीक से इसका पता लगाया गया है।

हम इस विशिष्ट मामले को पकड़ने की सोच रहे हैं, और बस अनुरोध को फिर से प्रयास करें। हालांकि हम इस अपवाद को पुन: पेश नहीं कर सकते हैं। इसलिए।

  1. हम उपरोक्त त्रुटि संदेश उत्पन्न करने वाले मामले को सही तरीके से कैसे पकड़ सकते हैं।

    पकड़ (WebException पूर्व) { अगर (ex.Message == "अंतर्निहित कनेक्शन बंद कर दिया गया था: एक कनेक्शन है कि जीवित रखा होने की उम्मीद थी सर्वर द्वारा बंद कर दिया गया था") {...}

    बदबू आ रही है।

  2. उपर्युक्त अपवाद को पुन: पेश करने के तरीके पर कोई सुझाव?

+0

'चलता है कि यह हर किसी के नहीं है। क्या वे उपयोगकर्ता प्रॉक्सी के पीछे हैं (या तो स्पष्ट रूप से सेट हैं, या एक पारदर्शी प्रॉक्सी)? कॉर्पोरेट वातावरण में व्यस्त प्रॉक्सी सर्वर अनपेक्षित रूप से कनेक्शन छोड़ सकते हैं, इसलिए अपवाद। किसी भी तरह से, यह किसी प्रकार की नेटवर्क समस्या (क्लाइंट, होस्ट, या मध्यस्थ बिट्स) है, न कि .NET Framework में एक बग। –

+2

आप शायद सही हैं कि यह एक नेटवर्क समस्या है। इस प्रकार हम अनुरोध को पुनः प्रयास करने का प्रयास करना चाहते हैं, यदि यह विशेष है, हालांकि हम सभी जानते हैं कि यह टेक्स्ट वेबएक्सप्शन से निकला है - तो क्या इस विशिष्ट उत्तेजना का पता लगाने के लिए एक विश्वसनीय तरीका है, कुछ विशिष्ट त्रुटि कोड या क्या नहीं? और हम इसे पुन: पेश करना चाहते हैं, इसलिए हम जांच कर सकते हैं कि अनुरोध को पुनः प्रयास करने से कुछ अन्य बुराई नहीं होती है जब "कनेक्शन बंद हो गया" होता है – Habalusa

+0

मुझे एक ही त्रुटि मिल रही है जब मैं सेवा परत से बड़ा डेटा भेजने की कोशिश कर रहा हूं। कोई संकेत यह क्यों हो रहा है? –

उत्तर

2

वेब क्लाइंट यह ठीक ठीक से पता लगाता है। इस प्रकार अपवाद। आपको उस सर्वर को ढूंढना होगा जो गलत व्यवहार कर रहा है। निश्चित नहीं है कि अगर आपको वह सर्वर मिल जाए तो क्या करना है, शायद आप व्यवस्थापक को एक अच्छा ईमेल संदेश भेज सकते हैं।

सर्वर यूआरएल लॉग इन करें।

+0

ठीक है, यह ओवरलोडेड नेट गेटवे से कुछ भी हो सकता है, कनेक्शन को समय-समय पर बंद कर रहा है, एक प्रॉक्सी सर्वर में अभिनय के बीच में, इनमें से कोई भी कभी भी अकेले ही ठीक नहीं होने देगा। इस बीच में यह उपयोगकर्ता है जो पीड़ित हैं। यहां एक स्पष्ट दौड़ की स्थिति भी है - उदा। क्या होगा यदि सर्वर सही ढंग से कनेक्शन भेजता है: बंद करें: जबकि ग्राहक कैश्ड कनेक्शन पर नया अनुरोध भेजने का प्रयास कर रहा है, लेकिन कनेक्शन-क्लोज़ अभी तक प्राप्त नहीं हुआ है। इस प्रकार सवाल - किसी भी साफ तरीके से हम इस अपवाद को पुन: उत्पन्न कर सकते हैं, और हम ई.मेसेज की तुलना में इस विशेष केस बार की जांच कैसे करते हैं? – Habalusa

+1

अपवाद हैंडलिंग को अनुकूलित करना केवल तभी उपयोगी होता है जब आप समस्या को ठीक करने के लिए अपने कोड में कुछ कर सकते हैं।आप ओवरलोडेड राउटर या बाल्की सर्वर को ठीक नहीं कर सकते हैं। और ऑपरेटिंग सिस्टम अंतर नहीं बता सकता है। यह WebExceptions की एक बड़ी श्रेणी से संबंधित है, आप बाद में पुनः प्रयास कर सकते हैं। यही कारण है कि इस विफलता के लिए कोई समर्पित अपवाद वर्ग नहीं है। IOException के समान ("बकवास हुआ") बनाम FileNotFoundException ("सामान्य बकवास, इसे ठीक करने में सक्षम हो सकता है")। –

1

मैं सुझाव है कि आप Misrosoft द्वारा this ब्लॉग पर एक नजर है: कुछ users` के लिए HTTP क्लाइंट प्रोटोकॉल मुद्दे

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

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