2015-10-28 12 views
5

क्या .NET क्लाइंट से .asmx वेब सेवा द्वारा लौटाई गई HTTP 500 त्रुटि को पकड़ने का कोई तरीका है?.asmx वेब सेवा से HTTP 500 त्रुटि प्रतिक्रिया को पकड़ने के लिए नेट कोड

नेट 4.5 (VS2015) का उपयोग करना, नेट ग्राहक कोड .asmx वेब सेवा खपत और नीचे दिए गए कोड का उपयोग कर इसे कॉल: .asmx वेब सेवा के साथ एक HTTP 500 त्रुटि देता है

var client = new WebserviceApi.MyServiceSoapClient(); 

var response = client.MyWebServiceMethod(); 

एक त्रुटि संदेश विवरण युक्त एक SOAP संदेश, "प्रतिक्रिया" चर शून्य पर सेट है।

फिडलर का उपयोग करके, यातायात .asmx वेब सेवा से HTTP 500 प्रतिक्रिया दिखाता है। प्रतिक्रिया में त्रुटि के विवरण के साथ एक SOAP एक्सएमएल संदेश होता है।

नेट क्लाइंट कोड में कोई अपवाद फेंक या पकड़ा नहीं गया है, निष्पादन सामान्य के रूप में जारी है।

इसका मतलब है कि ग्राहक के लिए अपवाद की प्रकृति के बारे में कोई जानकारी नहीं है। सभी क्लाइंट कोड यह जांच सकते हैं कि "प्रतिक्रिया" शून्य है, लेकिन अपवाद संदेश क्लाइंट कोड के लिए उपलब्ध नहीं है।

क्या .asm क्लाइंट कोड एक अपवाद फेंकने के लिए कोई तरीका है यदि .asmx वेब सेवा HTTP 500 प्रतिक्रिया देता है ताकि त्रुटि संदेश को चेक/लॉग किया जा सके?

+0

क्या आप 'कोशिश कैथ' कथन का उपयोग कर अपवाद को पकड़ नहीं सकते? – anmarti

+0

कोई अपवाद नहीं फेंक दिया गया है, निष्पादन एक शून्य "प्रतिक्रिया" चर के साथ सामान्य के रूप में जारी है। – Lenny

+0

तो, आप कैसे जानते हैं कि आपको 500 मिलते हैं? – anmarti

उत्तर

2

इसे थोड़ा सा शोध करने के बाद, ऐसा लगता है कि एएसएमएक्स से फेंकने वाली सभी त्रुटियां सोपएक्सप्शन क्लास के रूप में हैं, इसलिए उस वर्ग को पकड़ने का प्रयास उस त्रुटि को संभालने के लिए पर्याप्त होना चाहिए।

Further reading on ASMX exception handling

SoapException Class

nivlam भी this answer पर ASMX से कच्चे अनुरोध डेटा और साबुन से अधिक पढ़ने के लिए एक अच्छा समाधान propsed और आप शायद वहाँ से त्रुटि कोड मिल सकता है।

+0

दुर्भाग्य से इस मामले में एक अपवाद नहीं फेंक दिया गया है, हालांकि अच्छा होगा। – Lenny

+0

@ लेनी ने कोशिश की कि मैंने नीचे एक दूसरा खंड जोड़ा है, इसमें निवलम द्वारा एक उत्तर का एक लिंक है, कच्चे आउटपुट को पढ़ने के लिए अपनी विधि का उपयोग करें, और आपको जो त्रुटि मिल रही है उसे निर्धारित करें –

4

मुझे अक्ष (जावा) वेब सेवा के लिए एक ही समस्या थी। वे अपवाद फेंक रहे थे, भले ही प्रतिक्रिया वास्तव में एक HTTP 500 थी।

मैं यह सुनिश्चित नहीं कर सकता कि यह आपके मामले को हल करेगा, लेकिन मैंने GetWebResponse विधि को ओवरराइड करने और फेंकने का हल किया आवश्यकता होने पर खुद को अपवाद।

मैंने वेब संदर्भ जोड़ने के बाद विजुअल स्टूडियो द्वारा उत्पन्न वेब सेवा क्लाइंट कोड को बदलकर ऐसा किया (उत्पन्न फ़ाइल नाम है: Reference.cs, कभी-कभी यह समाधान में दिखाई नहीं देता है, आपको शीर्ष पर 'सभी फ़ाइलें दिखाएं' पर क्लिक करना होगा समाधान फलक के लिए और फिर अपने वेब सेवा संदर्भ फ़ाइलों उधेड़ना।

internal class ChangedWebServiceClient : SomeSoapService 
{ 

    protected override WebResponse GetWebResponse(WebRequest request) 
    { 
     var response = base.GetWebResponse(request); 

     if (response != null) 

     { 
      var responseField = response.GetType().GetField("_base", BindingFlags.Instance | BindingFlags.NonPublic); 
      if (responseField != null) 
      { 
       var webResp = responseField.GetValue(response) as HttpWebResponse; 
       if (webResp != null) 
       { 
        if (webResp.StatusCode.Equals(HttpStatusCode.InternalServerError)) 
         throw new WebException(
          "HTTP 500 - Internal Server Error happened here. Or any other message that fits here well :)"); 
       } 
      } 
     } 

     return response; 
    } 
} 
0

मैं एक ऐसी ही समस्या कुछ साल पहले किया था। HTTP 500 स्थिति कोड के साथ समस्या यह है कि सेवा कॉल सर्वर तक पहुंचने नहीं है। तो है आप इसे डीबग नहीं कर सकते हैं। मेरे लिए काम किया गया समाधान था यह सुनिश्चित करना कि मानकों के पास परिभाषित वेब विधियों के समान सटीक समान स्कीमा था। डेटा अनुबंधों में कोई मेल नहीं HTTP 500 आंतरिक सर्वर त्रुटि का कारण बन सकता है।

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