2010-08-25 6 views
6

मैं विंडोज सर्वर 2008, आईआईएस 7.5 पर चल रहे एएसपी.NET एप्लिकेशन में एक वर्कर थ्रेड उत्पन्न करता हूं। यह कार्यकर्ता थ्रेड करता है जो पहली बार एन सेकेंड के लिए सो जाता है, और फिर यह वास्तविक काम करता है। नींद के दौरान, एक थ्रेडएबॉर्ट अपवाद पकड़ो।एक कार्यकर्ता थ्रेड मेरे एएसपी.NET स्पॉन को नींद के दौरान थ्रेडएबॉर्ट अपवाद का अनुभव क्यों करता है?

क्या आप इस व्यवहार को समझा सकते हैं, और आप के बोनस अंक मुझे किसी भी आईआईएस/एएसपी.नेट सेटिंग्स को इंगित करते हैं जिसका उपयोग व्यवहार को समायोजित करने के लिए किया जा सकता है।

संपादित करें: अधिक जानकारी। ThreadAbortException को पकड़ने के सुझाव ने मुझे समस्या के आसपास काम करने में मदद की, इसलिए धन्यवाद। मैं पूरी तरह इस सवाल का मैं क्या सीखा के आधार पर की शब्दों दुबारा लिखा, लेकिन अभी भी, एक ही सवाल है, क्यों इस कार्यकर्ता धागा एक नींद के दौरान निरस्त किया जा रहा है?

+0

यदि आप लगातार दो या दो सेकंड के लिए सोते हैं तो क्या होता है? –

+2

पूरे धागे हैंडलर के चारों ओर कोशिश न करें और देखें कि क्या होता है? सबसे अधिक संभावना है कि आप ThreadAbortException प्राप्त करें जिसमें इसमें कुछ उपयोगी हो सकता है। –

+0

@Robert - कोई समस्या नहीं @ liho1eye - –

उत्तर

6

एक ThreadAbortException अपने कार्यकर्ता धागे पर होता है क्योंकि किसी और उस पर Thread.Abort कहा जाता है, तो यह शायद कुछ भी नहीं सीधे है कि आपके कार्यकर्ता धागा किया है, बल्कि कुछ बाहरी कारण। आपको जिस स्थान पर जांच करनी चाहिए वह किसी भी थ्रेड प्रबंधन या निरस्त करने के लिए अपना कोड है जो आप कर सकते हैं। अन्यथा, आईआईएस के लिए, यह एक कार्यकर्ता प्रक्रिया (w3wp.exe) या ऐप पूल, या ऐपडोमेन रीसाइक्लिंग के कारण हो सकता है।

रीसाइक्लिंग ऐप पूल, नियमित रूप से निर्धारित रीसायकल, या मेमोरी/सीपीयू उपयोग ट्रिगर के लिए निष्क्रिय टाइमआउट सेटिंग के कारण हो सकता है। ये सर्वर एक्सप्लोरर (विन 2K8 पर) में या Ietmgr.exe चलाकर IIS कॉन्फ़िगरेशन प्रबंधक के माध्यम से कॉन्फ़िगर करने योग्य हैं। टेस 'ब्लॉग here के अनुसार, वहाँ AppDomain रीसाइक्लिंग के लिए अन्य कारणों से कर रहे हैं:

  • machine.config, Web.Config या Global.asax संशोधित कर रहे हैं
  • बिन निर्देशिका या इसकी सामग्री संशोधित किया गया है
  • फिर से संकलन (aspx, ascx या asax) की संख्या सीमा machine.config में सेटिंग या web.config द्वारा निर्दिष्ट
  • पीएच (डिफ़ॉल्ट रूप से इस 15 के लिए सेट है) से अधिक है वर्चुअल निर्देशिका के ysical पथ संशोधित किया गया है
  • कैस नीति संशोधित किया गया है
  • वेब सेवा पुन: प्रारंभ होने
  • (2.0 केवल) आवेदन उप-निर्देशिका

ब्लॉग पोस्ट भी है कि नष्ट हो जाती हैं एक रीसायकल क्यों हुआ नीचे ट्रैकिंग पर जानकारी। स्टार्टर्स के लिए, इवेंट लॉग (eventvwr.msc) को देखने का प्रयास करें ताकि कोई विस्तृत जानकारी हो या नहीं।

आप कार्यकर्ता प्रक्रिया को सीधे डीबग करने का भी प्रयास कर सकते हैं। , W3wp.exe उदाहरण है जहाँ आपके कोड चलाता है के लिए वी.एस. डिबगर संलग्न Thread.Abort पर एक ब्रेकपाइंट जोड़ते हैं, और जहां से Abort होने वाले है यह देखने का उपयोग करके (यदि आप ".नेट फ्रेमवर्क स्रोत स्टेपिंग" डिबगर विकल्पों में सक्षम करने के लिए आवश्यकता हो सकती है) कॉल स्टैक विंडो। यह आपको नहीं बताएगा कि यह क्यों हो रहा है, लेकिन कम से कम आप जान लेंगे कि यह कौन कर रहा है।

+0

करना होगा क्योंकि समस्या एक होस्टिंग प्रदाता की मशीन पर हो रहा है सीधे धागा डिबग नहीं कर सकते, लेकिन मशीनों है कि मैं पर नियंत्रण पर नहीं।मेरा तर्क थ्रेड को रोक नहीं देता है। डिफ़ॉल्ट निष्क्रिय टाइमआउट मिनटों में है, जबकि यह समस्या तब हो रही है जब मेरा धागा 20 या उससे अधिक सेकंड सोता है। रीसाइक्लिंग के लिए अन्य कारणों में से कोई भी लागू नहीं होता है। कोई प्रतिक्रिया नहीं। रीडायरेक्ट और न ही प्रतिक्रिया। अंत शामिल है। तो ... अभी भी एक रहस्य है। –

+0

बस मेरी समस्या हल हो गई: मेरे धागे मध्य में निरस्त हो गए थे, और ऐसा इसलिए हुआ क्योंकि मैं अपने लॉग "बिन" फ़ोल्डर में लिख रहा था (जो आईआईएस रीसेट कर रहा था) ... – Illidan

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