2010-11-04 22 views
16

मेरे पास एक भारी ट्रैफ़िक एएसपीएक्स पृष्ठ है जो प्रत्येक उपयोगकर्ता के अनुरोध पर वेब सेवा को कॉल करता है।GetResponse पर 500 आंतरिक सर्वर त्रुटि()

string uri = "Path.asmx"; 
string soap = "soap xml string"; 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.Headers.Add("SOAPAction", "\"http://xxxxxx""); 
request.ContentType = "text/xml;charset=\"utf-8\""; 
request.Accept = "text/xml"; 
request.Method = "POST"; 

using (Stream stm = request.GetRequestStream()) 
{ 
    using (StreamWriter stmw = new StreamWriter(stm)) 
    { 
     stmw.Write(soap); 
    } 
} 
WebResponse response = request.GetResponse(); 
response.close(); 

सबकुछ ठीक काम कर रहा है लेकिन कभी-कभी मुझे निम्न त्रुटि मिल रही है।

रिमोट सर्वर ने एक त्रुटि लौटा दी: (500) आंतरिक सर्वर त्रुटि। System.Net.HttpWebRequest.GetResponse()

क्या किसी को इस त्रुटि के बारे में कोई जानकारी है या क्या कोई मुझे बता सकता है कि मैं गलत कर रहा हूं।

आप

+3

यदि यह कभी-कभी काम करता है और दूसरों को नहीं, तो आपको विफलता के साबुन एक्सएमएल को पोस्ट करने की आवश्यकता होती है। कोड में नहीं, कुछ गलत है। –

उत्तर

4

अंत में मैं निम्नलिखित कोड के साथ आंतरिक सर्वर त्रुटि संदेश से छुटकारा पाता हूं। सुनिश्चित नहीं है कि इसे प्राप्त करने का कोई और तरीका है या नहीं।


string uri = "Path.asmx"; 
string soap = "soap xml string"; 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); 
request.Headers.Add("SOAPAction", "\"http://xxxxxx""); 
request.ContentType = "text/xml;charset=\"utf-8\""; 
request.Accept = "text/xml"; 
request.Method = "POST"; 

using (Stream stm = request.GetRequestStream()) 
{ 
    using (StreamWriter stmw = new StreamWriter(stm)) 
    { 
     stmw.Write(soap); 
    } 
} 
 using (WebResponse webResponse = request.GetResponse()) { }  
+0

का उपयोग कर अंततः {निपटान} है। अपवाद से छुटकारा पाने का अच्छा तरीका है इसे पकड़ने के साथ अनदेखा करना।हा-हा –

18

धन्यवाद कि त्रुटि से, मैं कहूँगा कि अपने कोड ठीक, कम से कम बात यह है कि वेब सेवा कॉल है। त्रुटि वास्तविक वेब सेवा में प्रतीत होती है।

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

5

क्या आपने अपने अनुरोध के लिए UserAgent निर्दिष्ट करने का प्रयास किया है? उदाहरण के लिए:

request.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; 
+1

अनुपलब्ध उपयोगकर्ता एजेन्ट एक त्रुटि फेंकने के लिए गतिशील सामग्री के साथ कई वेबसाइटों का कारण बनता है। एक स्क्रैपर लिखते समय अच्छी सलाह है, लेकिन एसओएपी या आरईएसटी एपीआईएस के साथ इसकी आवश्यकता नहीं होनी चाहिए। –

28

मेरे लिए क्योंकि मैं 2 वेब एपीआई कार्यों कि ठीक उसी हस्ताक्षर था और दोनों एक ही क्रिया, HttpPost, क्या मैंने किया था क्रियाओं में से एक (प्रयुक्त एक बदल था यह त्रुटि उत्पन्न हुई अद्यतन करने के लिए) पुट करने के लिए और त्रुटि हटा दी गई थी। मेरी पकड़ बयान में निम्नलिखित समस्या के मूल को प्राप्त करने में मदद मिली:

catch (WebException webex) 
{ 
       WebResponse errResp = webex.Response; 
       using (Stream respStream = errResp.GetResponseStream()) 
       { 
        StreamReader reader = new StreamReader(respStream); 
        string text = reader.ReadToEnd(); 
       } 
} 
+1

यह अच्छी तरह से प्रलेखित नहीं है और यह मुझे हमेशा खोजने के लिए लेता है। उदाहरण के लिए धन्यवाद! – b729sefc

+0

यह बहुत उपयोगी पाया। यदि आप इसे रखने का इरादा रखते हैं या टीमसिटी या सीआई बॉक्स से आउटपुट पढ़ने की आवश्यकता है तो निम्न में परिवर्तन करने पर विचार करें। कैच (वेबएक्सप्शन वेबएक्सप्शन) { वेब रेस्पॉन्स वेब रेस्पॉन्स = वेब अपवाद। प्रतिक्रिया; का उपयोग कर (स्ट्रीम responseStream = webResponse.GetResponseStream()) { अगर (responseStream == नल) { फेंक; } स्ट्रीम रीडर रीडर = नया स्ट्रीम रीडर (प्रतिक्रियास्ट्रीम); स्ट्रिंग टेक्स्ट = रीडर। ReadToEnd(); नया वेब अपवाद (टेक्स्ट, वेब अपवाद) फेंक दें; } } –

+0

धन्यवाद! बहुत सराहना – Nobody

0

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

0

मेरे मामले में मेरा अनुरोध ऑब्जेक्ट बेस ऑब्जेक्ट से विरासत में मिला। जानबूझकर मैंने int के साथ एक संपत्ति जोड़ा? मेरे अनुरोध ऑब्जेक्ट में और मेरे बेस ऑब्जेक्ट में int datatype के साथ एक ही संपत्ति (समान नाम) है। मैंने यह देखा और उस संपत्ति को हटा दिया जिसे मैंने अनुरोध ऑब्जेक्ट में जोड़ा और उसके बाद यह ठीक काम करता था।

0

मेरे लिए त्रुटि भ्रामक थी। मैंने सोपूआई के साथ गलती वेब सेवा का परीक्षण करके सही त्रुटि की खोज की।

+0

... और पाया कि यह था ..? – SteveCav

+1

स्टीव कैव: असली त्रुटि लगभग कुछ भी हो सकती है: बिंदु यह है कि सोपूआई के साथ परीक्षण वास्तविक त्रुटि संदेश उत्पन्न हुआ, और अर्थहीन "आंतरिक सर्वर त्रुटि" नहीं। –

0

मेरे मामले में मैं HttpWebRequest ऑब्जेक्ट से SoapAction निर्देश को हटा देता हूं। इसलिए, मैं HttpWebRequest परिभाषाओं में .Headers.Add("SOAPAction","someurl") परिभाषित नहीं करता हूं और मेरा कोड ठीक काम करता है।

ResultXML एक XDocument है। ResultString एक स्ट्रिंग है।

try 
{ 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url); 
    //req.Headers.Add("SOAPAction", "http://tempuri.org/IWebService/GetMessage"); 
    req.ProtocolVersion = HttpVersion.Version11; 
    req.ContentType = "text/xml;charset=\"utf-8\""; 
    req.Accept = "text/xml"; 
    req.KeepAlive = true; 
    req.Method = "POST";   

    using (Stream stm = req.GetRequestStream()) 
    { 
     using (StreamWriter stmw = new StreamWriter(stm)) 
      stmw.Write(soapStr); 
    } 
    using (StreamReader responseReader = new StreamReader(req.GetResponse().GetResponseStream())) 
    { 
     string result = responseReader.ReadToEnd(); 
     ResultXML = XDocument.Parse(result); 
     ResultString = result;  
    } 
} 
संबंधित मुद्दे