HttpWebRequest.GetResponse () का उपयोग करते समय ThreadAbortException का कारण क्या हो सकता है

मैं इस स्थिति के कारण दुःस्वप्न में रह रहा हूं, मेरे पास एक HttpWebRequest.GetResponse है जो मुझे थ्रेडएबॉर्ट अपवाद देता है, जिससे पूरे ऐप को नीचे जाना पड़ता है।

मैं इससे कैसे बच सकता हूं, या कम से कम इसे संभाल सकता हूं, ऐसे मामले में Thread.ResetAbort() का उपयोग करना उपयोगी होगा?

यहां अधिक व्याख्या करने के लिए एक मोटा कोड नमूना है:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://someurl.com/");
HttpWebResponse resp = req.GetResponse();

अब ऊपर की आखिरी पंक्ति थ्रेडएबॉर्ट अपवाद को फेंकता है, ऐसा इसलिए हो सकता है क्योंकि अनुरोध का समय ठीक है, लेकिन मैं अपने एएसपी.NET 2.0 ऐप के अंदर थ्रेडएबर्ट अपवाद नहीं लेना चाहता क्योंकि यह इसे मारता है। ThreadAborException को कोशिश/पकड़ने के साथ पकड़ा नहीं जा सकता है, इसे संभालने का एकमात्र तरीका थ्रेड.ResetAbort() का उपयोग कर रहा है जिसका अपना बुरा प्रभाव भी है, यह थ्रेड को जीवित रखेगा और भगवान केवल कितने समय तक जानता है।

12
सिस्टम को पकड़ने का प्रयास करें। दूसरी पंक्ति पर अपवाद और देखें कि किस प्रकार का पूर्व फेंक दिया गया है।
जोड़ा लेखक StingyJack, स्रोत
आप कर सकते हैं ThreadAbortException को पकड़ें, आपको बस इसे सही तरीके से संभालना होगा। ResetAbort() जब आप पूरा कर लें तो करना उचित बात है। msdn.microsoft.com/en-us/library/&hellip देखें ; के लिए और अधिक।
जोड़ा लेखक Bob King, स्रोत

4 उत्तर

आप जो कहते हैं उससे ऐसा लगता है कि आप किसी एएसपी.NET एप्लिकेशन के आने वाले अनुरोध की प्रसंस्करण के भीतर बाहरी संसाधन को आउटगोइंग वेबआरक्वेट बना रहे हैं। यहां (कम से कम) दो टाइमआउट हैं जो यहां प्रासंगिक हैं:

  • WebRequest.Timeout (डिफ़ॉल्ट 100000ms = 100s) आउटगोइंग WebRequest के निष्पादन के लिए टाइमआउट निर्दिष्ट करता है। यदि यह टाइमआउट समाप्त हो जाता है, तो आपको वेब अपवाद प्राप्त करना चाहिए - इसलिए यह आपकी समस्या नहीं है।

  • आपके आने वाले अनुरोध को संसाधित करने वाले HttpRuntime में निष्पादन समय समाप्ति है: एमएसडीएन .NET 2.0 या बाद में, 90 के लिए .NET 1.x के लिए 110 है। जब यह टाइमआउट समाप्त हो जाता है, तो आपको थ्रेडएबॉर्ट अपवाद प्राप्त होगा। ऐसा लगता है कि यह हो रहा है।

In .NET 1.x, you'd expect this, because the default HttpRuntime executionTimeout is less than WebRequest.Timeout. In .NET 2.0, you'd expect this with the default timeouts if you have already spent >10s before making the outgoing WebRequest (e.g. if you have more than one outgoing WebRequest from within the same incoming request).

मैं आपको सुझाव दूंगा:

  • आउटगोइंग अनुरोधों के लिए WebRequest.Timeout को कम करें, और WebException को संभालें, या

  • यदि आउटगोइंग अनुरोध वास्तव में उस समय तक ले सकते हैं, तो MSDN

12
जोड़ा
httpRuntime.executionTimeout मेरे परिदृश्य में अपराधी था - धन्यवाद!
जोड़ा लेखक RobSiklos, स्रोत

I had this problem with using Response. Check out this article for some workarounds. http://support.microsoft.com/kb/312629

वेबएक्सप्शन और टिप्पणियों के लिए अनुभाग में इस एमएसडीएन दस्तावेज़ को भी देखें। http://msdn.microsoft.com/en- हमें/पुस्तकालय/system.net.httpwebrequest.getresponse.aspx

यह अपवाद पकड़ा जा सकता है ... यदि आपको सही का पता लगाने में परेशानी हो रही है, तो आपको एक सामान्य अपवाद (सिस्टम.एक्सप्शन) पकड़ने की कोशिश करनी चाहिए और वहां से स्टैक ट्रेस आपको विशिष्ट प्रकार (एचटीपीएक्सप्शन, वेबएक्सप्शन, आदि) को बताना चाहिए वास्तव में पकड़ो।

2
जोड़ा

हमारे आवेदन ने ThreadAbortException के हर समय बी/सी फेंक दिया Response.Redirect ("url") कॉल करता है। ऐप कभी बंद नहीं हुआ, सबसे अधिक संभावना बी/सी अपवाद कुछ बिंदु पर पकड़ा जा रहा था और सक्रिय रहा।

संयोग से, Response.Redirect ("url", false) प्रतिक्रिया को अपवाद के साथ समाप्त करने से रोक देगा। एंड्रयू का पोस्ट प्रतिक्रिया वर्ग के विभिन्न उपयोगों के लिए समान कार्यवाही से जुड़ा हुआ है।

0
जोड़ा
यह सटीक है (Response.Redirect (url) कॉल Response.End जो थ्रेडएबॉर्ट अपवाद फेंकता है) लेकिन ओपी की स्थिति के लिए प्रासंगिक नहीं है।
जोड़ा लेखक Joe, स्रोत

मैंने एंड्रयू और "फॉरक्रिप्ससेक" द्वारा सूचीबद्ध दोनों समस्याओं को देखा है।

आपके ThreadAbortException के लिए एक अन्य संभावना कोई भी कोड है जो सर्वर पक्ष पर पृष्ठ अनुरोध जीवन चक्र के बाहर चलता है, जैसे कि एचटीपी मॉड्यूल और एचटीपी हैंडलर। मॉड्यूल या हैंडलर के भीतर फेंक दिया गया कोई भी अपवाद एएसपी.Net में डिफ़ॉल्ट अनचाहे अपवाद तंत्र पर नहीं जाता है, और धागे को मरने का कारण बन सकता है।

इस आलेख के अनुसार, कुछ अपवाद हैं जिन्हें सामान्य रूप से एएसपीनेट या सीएलआर में आसानी से संभाला नहीं जा सकता है:

विश्वसनीयता सर्वोत्तम व्यवहार

सुनिश्चित नहीं है कि यह आपके प्रश्न में सूचीबद्ध क्लाइंट कोड पर लागू होता है, लेकिन यह संबंधित हो सकता है।

उम्मीद है की वो मदद करदे!

0
जोड़ा