2009-05-22 9 views
7

कोड काफी सरल है --- मुद्दा यह है कि समूहपैथ स्ट्रिंग में एक अमान्य वर्ण है (एक '/' सटीक होना)।यह सभी ब्लॉक को क्यों पकड़ता है वास्तव में सभी

जो मैं करने की कोशिश कर रहा हूं (कम से कम एक स्टॉप गैप के रूप में) निर्देशिका एंटर्रीज़ पर छोड़ दिया गया है कि मुझे सीएन नहीं मिल सकता है --- क्यों नहीं।

हालांकि जब मैं इस कोड को चलाता हूं तो कैच ब्लॉक नहीं चलता है और मैं इसके बजाय मिलता हूं: सर्वर परिचालन नहीं है। और एक अनचाहे सिस्टम। रनटाइम .InteropServices.COMException।

कैच ब्लॉक इस अपवाद को क्यों नहीं पकड़ पाएगा।

try 
{ 
    using (DirectoryEntry groupBinding = new DirectoryEntry("LDAP://" + groupPath)) 
    { 
     using (DirectorySearcher groupSearch = new DirectorySearcher(groupBinding)) 
     { 

      using (DirectoryEntry groupEntry = groupSearch.FindOne().GetDirectoryEntry()) 
      { 
       results.Add(string.Format("{0}", groupEntry.Properties["cn"].Value.ToString())); 
      } 
     } 
    } 
} 
catch 
{ 
    Logger.Error("User has bad roles"); 
} 

अतिरिक्त टिप्पणियों: कोड एक कस्टम RoleProvider में वास्तव में है, और उत्सुक बात यह है कि अगर मैं संदर्भ, एक सरल WinForms अनुप्रयोग में इस प्रदाता, और एक ही आदानों पकड़ ब्लॉक के साथ यह एक ही विधि कॉल वही करता है जो ऐसा लगता है। मुझे लगता है कि यह सुझाव देता है कि COM अपवाद बनाम .NET अपवादों से संबंधित प्रस्तावित उत्तर सटीक नहीं है। हालांकि मुझे यह समझने में हानि हुई है कि WebDev सर्वर

+4

की जांच करना? –

+0

आपको किस लाइन पर अपवाद मिलता है? और क्या धागा? –

+2

इसके अलावा, क्या आप अपवाद जोड़ सकते हैं? (अपवाद। टॉस्ट्रिंग()) –

उत्तर

13

से निष्पादित होने पर यह कोड कैसा नहीं होगा, जब आप यह निर्दिष्ट नहीं करते कि क्या पकड़ना है, तो यह .NET अपवादों के लिए डिफ़ॉल्ट है। आपका अपवाद COM में है जहां .NET अपवाद को पकड़ने के लिए सेट नहीं है।

try 
    { 

    } 
    catch (System.Runtime.InteropServices.COMException COMex) 
    { 

    } 
    catch (System.Exception ex) 
    { 

    } 
+0

COMException विरासत विरासत विरासत विरासत विरासत विरासत विरासत विरासत विरासत में मिलता है। जब तक मुझे कुछ याद नहीं आ रहा है, यह पकड़ने में कमी का मामला नहीं होना चाहिए, शायद वह सिर्फ सिस्टम जोड़ रहा है। अपवाद पकड़ो? –

+0

COMException सिस्टम से प्राप्त हो सकता है। अपवाद, लेकिन यह अभी भी सिस्टम के साथ COM इंटरऑप में पकड़ा नहीं गया है। अपवाद। मैंने ऑटोकैड के साथ बहुत सारे इंटरऑप किए हैं और इससे मुझे थोड़ी देर के लिए पागल कर दिया गया क्योंकि मुझे अपने सटीक अपवादों को निर्दिष्ट करने के बजाय कैच का उपयोग करने के लिए इतना उपयोग किया जाता था। – Noah

+0

woah फोन पकड़ो - क्या आप गंभीर हैं ?? स्पष्ट रूप से आप हैं लेकिन यह वास्तव में आश्चर्यजनक और वास्तव में बुरा है! क्या यह किसी अन्य बाहरी अपवाद प्रकार के लिए होता है? – Rory

2

कि कोशिश ब्लॉक के भीतर से फेंका एक COMException पकड़ लिया और कैच ब्लॉक द्वारा निगल लिया हो जाएगा: इस समस्या से निपटने का सबसे अच्छा तरीका COM अपवाद है, जो कुछ इस तरह देखना चाहिए पकड़ने के लिए है।

ब्रेक लें, खुद को कॉफी लें, "लॉगर.रर ..." पर एक ब्रेकपॉइंट डालें और पुनः प्रयास करें।

3
वहाँ

तीन कारणों से है:

  1. वहाँ क्रम में
  2. आवेदन एक बग है और/या धागा कोड कि
  3. आप पूरी नहीं देख रहे हैं कार्यान्वित में से कुछ के हिस्से के रूप समाप्त हो रहा है चित्र

व्यक्तिगत तौर पर मैं 3 के लिए वोट, और मैं अनगिनत डिबगिंग सत्र मैं कहाँ क्यों कोड के कुछ टुकड़े मेरी अपवाद हैंडलिंग नहीं है पड़ा है, जबकि वास्तव में इस दृश्य स्टूडियो कि configu था सभी फेंकने वाले अपवादों पर रुकने के लिए लाल, भले ही वे पकड़े गए हों या नहीं।

क्या आपने प्रोग्राम को डीबगर में चलने के लिए कहने की कोशिश की है और देखें कि क्या यह कैच-ब्लॉक में समाप्त होता है?

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

बेशक, यदि आप रनटाइम पर यह समस्या देखते हैं, तो कोई डीबगर संलग्न नहीं है, तो मुझे ऊपर बिंदु 1 और 2 को छोड़कर, कोई जानकारी नहीं है।

और निश्चित रूप से हमेशा 4 बिंदु है: अज्ञात।

2

COMException साथ वहाँ भी अपवाद asynchronus रहे है कि नहीं जैसे पकड़े:

  • OutOfMemoryException
  • StackoverflowException
  • (नहीं, यह इस साइट :) से संबंधित एक मजाक नहीं है) ThreadAbortException

क्या आप सुनिश्चित हैं कि यह मामला नहीं है?

+1

एफवाईआई, आप * आउटऑफमेमरी अपवाद पकड़ सकते हैं। चाहे आप उस समय कुछ मेमोरी सफलतापूर्वक मुक्त कर सकें (चीजों को रिलीज संदर्भ) आपके आवेदन पर निर्भर करता है। –

+0

वैसे हाँ, आप तकनीकी रूप से उन्हें पकड़ सकते हैं लेकिन जब आप कैच ब्लॉक से बाहर निकलते हैं तो उन्हें सीएलआर रनटाइम द्वारा पुनर्स्थापित किया जाएगा .. –

1

मुझे एक ही समस्या थी। मैं एक वीबी 6 COM ऑब्जेक्ट का आह्वान कर रहा था जिसने एक त्रुटि उठाई। वास्तविक अपवाद प्रकार सिस्टम के रूप में सामने आया। Reflection.TargetInvocationException। आंतरिक अपवाद को COMException पर सेट किया गया था। मैं सिस्टम को पकड़ने में समाप्त हुआ। रिफ्लेक्शन। लक्ष्यइन्वोकेशन अपवाद और डीबगर में, या निर्माण में आंतरिक अपवाद

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