मेरा एएसपीनेट एप्लिकेशन ThreadAbortException फेंक रहा है क्यों?

आत्म व्याख्यात्मक प्रश्न।

जब कुछ भी गलत नहीं होता है तब भी यह बात मेरी कोशिश पकड़ने में बुलबुला क्यों करती है?

यह मेरे लॉग में, सैकड़ों बार क्यों दिख रहा है?

मुझे यह एक नया सवाल पता है, लेकिन यदि यह साइट खोज रैंकिंग प्राप्त करेगी और नए लोगों में आकर्षित करेगी तो हमें उनसे पूछना होगा

0
ro fr bn

5 उत्तर

ThreadAbortException के लिए सबसे आम कारण Response.End, Response.Redirect, या Server.Transfer । माइक्रोसॉफ्ट ने कुछ सुझाए गए कार्यों को प्रकाशित किया है जिनका उपयोग उन कार्यों के अंत में किया जाना चाहिए।

0
जोड़ा
धन्यवाद!!!!!!
जोड़ा लेखक Prime By Design, स्रोत

यह शायद एक Response.Redirect कॉल से आ रहा है। स्पष्टीकरण के लिए इस लिंक को देखें:

http://dotnet.org.za/armand/archive/2004 /11/16/7088.aspx

(ज्यादातर मामलों में, Response.Redirect (url, false) को कॉल करना समस्या को हल करता है)

0
जोड़ा
ध्यान दें कि उपरोक्त लिंक टूटा हुआ है
जोड़ा लेखक JoshL, स्रोत
एरिक का जवाब सही है लेकिन आपको पता होना चाहिए कि झूठे पैरामीटर में गुजरने का मतलब है कि वर्तमान धागा निरस्त नहीं किया गया है यानी Response.Redirect के बाद कोड चलाया जाएगा।
जोड़ा लेखक CodeClimber, स्रोत

Response.Redirect का कारण यह अपवाद क्यों देगा क्योंकि एपीपीनेट आंतरिक रूप से Thread.Abort() के साथ इस एपीआई को कार्यान्वित करता है। जब इस विधि को बुलाया जाता है, तो एक विशेष थ्रेडएबॉर्ट अपवाद फेंक दिया जाता है। यह अपवाद किसी भी पकड़ ब्लॉक द्वारा निगल नहीं जाएगा। इसे प्रत्येक पकड़ ब्लॉक के अंत में फिर से फेंक दिया जाएगा।

0
जोड़ा

यह जानकर कि (कम से कम) तीन एपीआई हैं जो आंतरिक रूप से Thread.Abort का उपयोग करते हैं, मैं अधिक व्यावहारिक शर्तों में जवाब देना चाहता हूं, इसके बारे में क्या करना है, इसके बारे में क्या करना है।

हमारे लिए, यह त्रुटि अचानक लॉग इन होने लगी। किया बदल गया? हमने कुछ डेटाबेस प्रक्रिया में एक बग तय किया जो साइटमैप से निपट रहा था।

लॉग 4नेट लॉग ने एक्स-फॉरवर्डेड-फॉर हेडर दिखाया है (हम एनएलबी के पीछे हैं) Googlebot का आईपी पता था, 66.249.78.x जिसने साइटमैप परिवर्तन के बारे में अपने सिद्धांत को बल दिया, जिससे Google हमारी साइट को अधिक आक्रामक रूप से छवियों की तलाश में क्रॉल कर रहा था।

पहली बात यह जानना था कि केवल Googlebot इस समस्या का कारण बनने में सक्षम था। कोई अन्य क्लाइंट ट्रिगर नहीं कर रहा था जो भी कोड पथ Response.Redirect , या जो कुछ भी उपयोग करता है।

तो HttpAplication.Error हैंडलर में, मैंने सभी शीर्षकों के साथ अतिरिक्त विस्तृत आउटपुट लॉग करने के लिए कुछ कोड जोड़ा, और HttpResponse और HttpContext में अधिकांश डेटा लॉग इन किया। लॉग करने के लिए spewed।

यह मुझे देखने देता है कि समस्या यह थी कि Googlebot एक आईफोन उपयोगकर्ता एजेंट स्ट्रिंग का उपयोग कर रहा है और इसके साथ सशस्त्र है, मैं "आईफोन" के लिए कोडबेस खोज सकता हूं और इसके साथ आता हूं:

private void CheckIPhoneAccess() { ... }

और वह एक पुनर्निर्देशन का उपयोग करता है।

इसके बारे में क्या करना है?

खैर, इस वृद्ध कोडबेस के लिए, यह सभी Response.Redirect कॉल को रेट्रो-पैचिंग के लायक नहीं है, इसलिए मैं एप्लिकेशन के लिए ThreadAbortException के लिए लॉगिंग स्तर को कम करने जा रहा हूं।

मैं Googlebot के मोबाइल क्रॉलर के व्यवहार को बदल दूंगा, जो कि हमारी साइट मोबाइल पर कौन सी सेवा करता है, इसके बारे में 'झूठ' नहीं लेता है क्योंकि यह केवल पहली हिट पर रीडायरेक्ट करता है, इसके बाद यह एक कुकी पढ़ता है और छवि दिखाता है । Googlebot उस कुकी को कैश नहीं लग रहा है।

यह सही नहीं है, लेकिन साइट को पुनर्निर्मित करने की वजह है। शायद स्कैला या कुछ का उपयोग कर एक और टीम द्वारा, इसलिए व्यावहारिक शब्दों में, मुझे लगता है कि यह एक अच्छा विकल्प है। मैं टिप्पणियां जोड़ूंगा और बाद में इस मुद्दे पर फिर से विचार कर सकता हूं, एक Response.SafeRedirect एक्सटेंशन बनाएं जो इस सलाह को समाहित करता है:

क्यों Response.Redirect सिस्टम का कारण बनता है। थ्रेडिंग। थ्रेडएबॉर्ट अपवाद?

ल्यूक

0
जोड़ा
जोड़ने की आवश्यकता है, हैसिनिपिफोनप्रोमो कुकी कभी सेट नहीं की जा रही थी, इसलिए Googlebot-Mobile को रीडायरेक्ट किया जा रहा था। वह मूल कारण था।
जोड़ा लेखक Luke Puplett, स्रोत

जैसा कि अन्य ने कहा है, यह तब होता है जब आप Response.End() को कॉल करते हैं (जो तब होता है जब आप Response.Redirect को दूसरे पैरामीटर के रूप में झूठ बोलने के बिना कहते हैं)। यह डिजाइन के रूप में काम कर रहा है; आमतौर पर, अगर आप Response.Redirect कहते हैं, तो आप तुरंत रीडायरेक्ट करना चाहते हैं। अधिक जानकारी के लिए इसे देखें:

Response.Redirect और ThreadAbortException

0
जोड़ा