2009-12-04 9 views
6

मैं किसी ऐप में प्रबंधित त्रुटि के जवाब में प्रदान की गई जानकारी को बेहतर बनाने की कोशिश कर रहा हूं।500 आंतरिक सर्वर त्रुटि HttpWebRequest का उपयोग करते समय, मैं वास्तविक त्रुटि कैसे प्राप्त कर सकता हूं?

इस कोड है:

Try 
     httpRequestObj = HttpWebRequest.Create(strRequest) 
     httpRequestObj.Method = "GET" 
     httpRequestObj.UseDefaultCredentials = True 
*  httpResponse = httpRequestObj.GetResponse 
     Using reader As StreamReader = New StreamReader(httpResponse.GetResponseStream()) 
      strXML = reader.ReadToEnd() 
     End Using 
    Catch ex As WebException 
     'do something with ex 
    End Try 

WebException * लाइन

वर्तमान में सभी मैं अपवाद में देखते हैं पर फेंक दिया जाता है कि "दूरस्थ सर्वर ने एक त्रुटि दिखाई: (500) आंतरिक सर्वर त्रुटि "। मैंने डीबग में अपवाद को देखा है लेकिन मुझे जो जानकारी चाहिए वह वहां नहीं है- मुझे लगता है कि उस जानकारी को देखने के लिए प्रतिक्रिया को पढ़ने की आवश्यकता होगी लेकिन यह अब तक कभी नहीं मिलती है।

अगर मैं अनुरोध लेने के लिए और यह मेरे ब्राउज़र में पेस्ट सीधे मैं XML स्वरूप में त्रुटि जानकारी है कि एपीआई मैं फोन कर रहा हूँ से दिया जाता है देख सकते हैं, जानकारी की तरह:

<Error> 
    <description>info I want to get to here</description> 
    <detail /> 
    <code>info I want to get to here</code> 
    <source /> 
    <category>info I want to get to here</category> 
    <file>info I want to get to here</file> 
    <line>info I want to get to here</line> 
    <pad /> 
</Error> 

वहाँ कोई तरीका है मैं इस कोड को बदल सकता हूं ताकि मैं 500 त्रुटि से पहले प्राप्त कर सकूं और वास्तविक प्रतिक्रिया देख सकूं, मैं विफलता के लिए वास्तविक समस्या का पता लगाने के लिए इस XML को पार्स करने में सक्षम होना चाहता हूं।

नोट: अपवाद में एक ex.Response (System.Net.HttpWebResponse) है, लेकिन मुझे वहां मौजूद जानकारी नहीं दिखाई दे सकती है, केवल हेडर जानकारी का एक भार है।

उत्तर

17

आप अपवाद से त्रुटि प्रतिसाद प्राप्त कर सकते हैं ....

try 
{ 
.... 
} catch(Exception e) { 
    if (e is WebException && ((WebException)e).Status==WebExceptionStatus.ProtocolError) 
    { 
     WebResponse errResp = ((WebException)e).Response; 
     using(Stream respStream = errResp.GetResponseStream()) 
     { 
     // read the error response 
     } 
    } 
} 
+0

बस इसे अभी देखें। इस कोड के साथ पहली समस्या यह है कि "ResponseError" WebExceptionStatus enum http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus.aspx – DannykPowell

+3

का हिस्सा नहीं दिखता है, इसे सही में चिह्नित करना इसके बावजूद, क्योंकि इस जवाब ने मुझे समाधान प्राप्त करने में मदद की। StreamReader = नई StreamReader (ex.Response.GetResponseStream()) strXML = reader.ReadToEnd() अंत के रूप में पाठक का उपयोग – DannykPowell

+0

बारे में खेद का उपयोग WebException रूप पकड़ने पूर्व, यह होना चाहिए: मेरे कोड (vb.net) की तरह दिखता है वास्तव में WebExceptionStatus.ProtocolError हो। इस मामले में, प्रतिक्रिया ऑब्जेक्ट में त्रुटि स्ट्रीम होनी चाहिए। अब, इसके बावजूद, यदि आपकी त्रुटि स्ट्रीम खाली है, तो इसका मतलब यह हो सकता है कि सर्वर ने कुछ भी नहीं भेजा है, या कहीं भी एक बग है। क्या आप http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html का उपयोग करके एक ट्रैसेलॉग प्राप्त कर सकते हैं? वह विल्स दिखाएगा कि सर्वर ने प्रतिक्रिया इकाई भेजी है या नहीं। – feroze

2

Fiddler का उपयोग करने का प्रयास करें। यह डीबगिंग प्रॉक्सी है, जो आपको क्लाइंट और सर्वर के बीच भेजने वाले सभी डेटा दिखाएगा। आप सभी शीर्षलेख और संदर्भ भी देख पाएंगे।

+0

अच्छा विचार, और त्वरित उत्तर के लिए धन्यवाद – DannykPowell

+0

@DannykPowell: यह वेब डेवलपर्स के लिए होना चाहिए। –

+0

लॉल, हाँ मैं अच्छी तरह से परिचित हूं। और मैं – DannykPowell

3
 System.Net.WebResponse response = null; 
     try 
     { 
      response = wreq.GetResponse(); 
     } 
     catch (WebException e) 
     { 
      if (e.Status == WebExceptionStatus.ProtocolError) 
      { 
       string error = new System.IO.StreamReader(e.Response.GetResponseStream()).ReadToEnd(); 
      } 
     } 
     catch (Exception e) 
     { 
     } 

इस के रूप में सरल, आप स्ट्रिंग त्रुटि में पूरे प्रतिसाद मिलेगा।

+0

+1 वास्तविक वेबएक्सप्शन को पकड़ना सामान्य अपवाद को पकड़ने से बेहतर है अन्यथा आप अनिवार्य रूप से अन्य सभी को अनदेखा कर रहे हैं। – iGanja

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