2013-02-14 8 views
6

साथ प्रवेश न होने पर मुझे लगता है कि " '/ MySiteDev' आवेदन में सर्वर त्रुटि" त्रुटि निश्चित समयत्रुटि Application_Error

निम्नलिखित थ्रो एक Asp.Net 4.0 Web Forms आवेदन किया है।

यह त्रुटि केवल कभी-कभी होती है। और यह त्रुटि Application_Error ईवेंट को फायर नहीं कर रही है जिसे Global.asax में संभाला जाता है।

चूंकि यह एप्लिकेशन_इरर को फायर नहीं कर रहा है, तो अन्य सभी संभावित स्थान क्या हैं जिनके पास इस त्रुटि ईवेंट का लॉग होगा? घटना दर्शक के अलावा कुछ भी उपलब्ध है?

एएसपी.Net ढांचे द्वारा किए गए अपवादों को जानने का कोई तरीका?

नोट: customErrors mode="Off"। इसके अलावा runAllManagedModulesForAllRequests="true"

अद्यतन

How to: Handle Application-Level Errors

कोई त्रुटि हैंडलर कि Global.asax फ़ाइल में परिभाषित किया गया है केवल त्रुटियों कि ASP.NET क्रम के अनुसार अनुरोधों की प्रोसेसिंग के दौरान हो पकड़ेगा से संदर्भ । उदाहरण के लिए, यदि उपयोगकर्ता किसी .aspx फ़ाइल का अनुरोध करता है जो आपके एप्लिकेशन में नहीं होता है तो यह त्रुटि को पकड़ लेगा। हालांकि, यदि कोई उपयोगकर्ता किसी भी nonxistent .htm फ़ाइल का अनुरोध करता है तो यह त्रुटि को नहीं पकड़ता है। गैर-ASP.NET त्रुटियों के लिए, आप इंटरनेट इनफॉर्मेशन सर्विसेज (आईआईएस) में एक कस्टम हैंडलर बना सकते हैं। कस्टम हैंडलर को सर्वर-स्तरीय त्रुटियों के लिए भी नहीं बुलाया जाएगा।

आप Global.asax फ़ाइल से अनुरोधों के लिए सीधे त्रुटि जानकारी आउटपुट नहीं कर सकते हैं; आपको दूसरे पृष्ठ पर नियंत्रण स्थानांतरित करना होगा, आमतौर पर एक वेब फॉर्म पेज। किसी अन्य पृष्ठ पर नियंत्रण स्थानांतरित करते समय, स्थानांतरण विधि का उपयोग करें। यह वर्तमान संदर्भ को संरक्षित करता है ताकि आप GetLastError विधि से त्रुटि जानकारी प्राप्त कर सकें।

त्रुटि को संभालने के बाद, आपको सर्वर ऑब्जेक्ट (HttpServerUtility क्लास) की ClearError विधि को कॉल करके इसे साफ़ करना होगा।

कोड

protected void Application_Error(object sender, EventArgs e) 
    { 
     //Get the exception object 
     Exception exception = Server.GetLastError().GetBaseException(); 

     //Get the location of the exception 
     string location = Request.Url.ToString(); 
     if (!String.IsNullOrEmpty(location)) 
     { 
      string[] partsOfLocation = location.Split('/'); 
      if (partsOfLocation != null) 
      { 
       if (partsOfLocation.Length > 0) 
       { 
        location = partsOfLocation[partsOfLocation.Length - 1]; 
       } 
      } 

      //Maximum allowed length for location is 255 
      if (location.Length > 255) 
      { 
       location = location.Substring(0, 254); 
      } 
     } 

     string connectionString = ConfigurationManager.ConnectionStrings[UIConstants.PayrollSQLConnection].ConnectionString; 
     ExceptionBL exceptionBL = new ExceptionBL(connectionString); 

     exceptionBL.SubmitException(exception.Message, location); 
     Log.Logger.Error(exception.Message); 

    } 

कॉन्फ़िग

<system.web> 

<compilation debug="true" targetFramework="4.0" /> 
<pages validateRequest="false"></pages> 
<httpRuntime requestValidationMode="2.0" /> 
<customErrors mode="Off"/> 
<authentication mode="Windows"></authentication> 
<identity impersonate="true" userName="domain\xxxx" password="xxxx"/> 

</system.web> 

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
<httpErrors errorMode="Detailed" /> 
</system.webServer> 

अद्यतन संदर्भ

  1. Application_Error not firing
  2. Global.asax event Application_Error is not firing
  3. Application_Error does not fire?
  4. How to: Handle Application-Level Errors

उत्तर

1

यह ए और बी बॉक्स के साथ load balanced वातावरण है।

जिस टीम ने वेब एप्लिकेशन को तैनात किया है, उसने पुष्टि की है कि बॉक्स में से एक में, कॉन्फ़िगरेशन फ़ाइल ठीक से कॉपी नहीं की गई है।

मुझे लगता है कि जब यह एक बॉक्स को मार रहा था और बी बॉक्स में विफल रहा था तो एप्लिकेशन अच्छी तरह से काम करता था। मुझे लगता है, चूंकि कॉन्फ़िगर नहीं है, इसलिए Application_Error पर कॉल करना संभव नहीं था।

कृपया बताएं कि क्या आपकी राय अलग है या नहीं।

नोट: समस्या तब नहीं है जब वे

3

की जांच ईवेंट व्यूअर में लॉग, जो दोनों सर्वर-स्तर और अनुप्रयोग स्तर त्रुटियों लॉग इन करना चाहिए।

एप्लिकेशन त्रुटि हैंडलर संभवतः ईवेंट को संसाधित नहीं कर रहा है क्योंकि यह आपके एप्लिकेशन को सफलतापूर्वक प्रारंभ करने और एक संदर्भ बनाने से पहले हो रहा है। तो, अनुरोध को संसाधित करने के लिए एक अनुप्रयोग कॉन्फ़िगरेशन या सर्वर कॉन्फ़िगरेशन समापन प्रतीत होता है।

या, एप्लिकेशन को जीवन चक्र अनुरोध में पर्याप्त समस्या का सामना करना पड़ रहा है कि शुरू होने के बाद भी, यह तब तक 'लटका' है जब तक कि सर्वर प्रक्रिया को मारने का फैसला नहीं करता है (उदाहरण के लिए, शायद @MikeSmithDev द्वारा उल्लिखित स्टैक ओवरव्लो एक्सेप्शन के रूप में)।

+1

इसे फिर से तैनात करें! इसके अलावा, StackOverflowException हो सकता है ... मुझे ईवेंट लॉग से ओपी विवरण देखने में दिलचस्पी होगी। – MikeSmithDev

+0

@MikeSmithDev निम्नलिखित आलेख कहता है, "यह एक" स्टैक ओवरफ्लो "अपवाद हो या" 404 नहीं मिला "यह एप्लिकेशन_इरर में समाप्त हो जाएगा।" क्या आप कह रहे हैं कि यह कथन गलत है? 'StackOverflow अपवाद' को एप्लिकेशन_इरर द्वारा पकड़ा नहीं जाएगा? http://totaldotnet.com/Article/ShowArticle58_GlobleErrorHandle.aspx – Lijo

+1

@ लिजो हाँ मैं यही कह रहा हूं। मैंने अभी आपके कोड का परीक्षण किया है। यह एक नियमित अपवाद पकड़ा। जब मैंने स्टैक ओवरफ्लो एक्सेप्शन किया तो यह इसे पकड़ नहीं पाया। कोशिश करें/पकड़ उन्हें पकड़ नहीं सकते हैं। इसी प्रक्रिया को तुरंत समाप्त कर दिया गया है। यदि यह बहुत अधिक होता है, तो अक्सर, ऐप_पूल बंद हो जाएगा और जब तक आप इसे रीसायकल नहीं करेंगे तब तक आपकी साइट मूल रूप से मर जाएगी। – MikeSmithDev

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