2009-07-20 28 views
6

मेरी वेब सेवा विधि एक संग्रह वस्तु देता है, यह अच्छी तरह से serialize होगा, सी # वेब सेवाओं के तरीके के लिए धन्यवाद!एएसएमएक्स वेब सेवा से त्रुटियों को कैसे वापस करें?

लेकिन यदि मेरा कोड एक अपरिचित अपवाद फेंकता है, तो मैं इसके बजाय एक कस्टम त्रुटि ऑब्जेक्ट वापस करना चाहता हूं।

क्या यह सी # एएसपी.नेट वी 2 का उपयोग कर संभव है?

उदाहरण के लिए,

सामान्य ऑपरेशन लौटना चाहिए:

<Books> 
    <book>Sample</book> 
    <book>Sample</book> 
</Books> 

लेकिन त्रुटि पर मैं चाहता हूँ

<error> 
     <errorMessage></errorMessage> 
    </error> 
+0

ध्यान दें कि एएसएमएक्स वेब सेवाएं एसओएपी दोषों का उचित समर्थन नहीं करती हैं। जेनरेट डब्लूएसडीएल दोषों को परिभाषित नहीं करेगा, जिससे कुछ ग्राहक उन्हें अनदेखा कर सकते हैं या प्राप्त होने पर घातक त्रुटियों को वापस कर सकते हैं। इस समस्या से बचने के लिए डब्ल्यूसीएफ का उपयोग करें। –

उत्तर

7

हाँ, यह संभव है।

आपको SoapException class और विशेष रूप से Detail property सोपएक्सप्शन क्लास में देखने की आवश्यकता होगी।

सोपएक्सप्शन क्लास प्रभावी रूप से "Soap Fault" प्रस्तुत करेगा, जो क्लाइंट/उपभोक्ताओं को वेब सेवा विधि से त्रुटि जानकारी लौटने के लिए मानक-अनुरूप तंत्र है।

सोपएक्सप्शन वर्ग की "विस्तार" संपत्ति XmlNode प्रकार है और इस प्रकार या तो एक नोड/तत्व या बाल नोड्स का पदानुक्रम हो सकता है। इसलिए विस्तारित नोड आसानी से आपके स्वयं के कस्टम त्रुटि ऑब्जेक्ट के क्रमबद्ध प्रतिनिधित्व के लिए "पैरेंट" के रूप में कार्य कर सकता है और कार्य कर सकता है।

MSDN से:

विस्तार से संपत्ति आवेदन विशिष्ट त्रुटि सोप अनुरोध के शरीर तत्व से संबंधित विवरण की आपूर्ति के लिए है। एसओएपी विनिर्देश के अनुसार, यदि कोई त्रुटि उत्पन्न होती है क्योंकि एसओएपी अनुरोध के बॉडी तत्व के कारण क्लाइंट अनुरोध संसाधित नहीं किया जा सका, तो विस्तार संपत्ति सेट की जानी चाहिए। यदि SOAP अनुरोध की शीर्षलेख प्रविष्टियों में कोई त्रुटि हुई है, तो आपको एक SoapHeaderException फेंकना होगा, ताकि त्रुटि विवरण SOAP शीर्षलेख में वापस कर दिए जाएं। यदि त्रुटि उत्पन्न नहीं हुई है, तो बॉडी तत्व की प्रसंस्करण के कारण, विस्तारित संपत्ति सेट नहीं की जानी चाहिए।

विस्तारित संपत्ति के लिए XmlNode बनाने में, विस्तार एलीमेंटनाम के नाम और नामस्थान गुणों का उपयोग SOAP विनिर्देश के साथ consistancy [sic] सुनिश्चित करने के लिए किया जा सकता है।

विस्तार तत्व के सभी तत्काल बाल तत्वों को विस्तार प्रविष्टियों कहा जाता है और प्रत्येक विस्तार प्रविष्टि को विस्तार तत्व के भीतर एक स्वतंत्र तत्व के रूप में एन्कोड किया जाता है।

ध्यान दें कि अगर आप अपने वेब सेवा प्रतिक्रियाओं के साथ सही ढंग से साबुन आज्ञाकारी रहना चाहते हैं, तो आप एक SoapException अगर त्रुटि मूल एक्सएमएल अनुरोध के ग्राहक के हैडर अनुभाग के भीतर होती है बजाय एक SoapHeaderException वापस जाने के लिए की आवश्यकता होगी (यह ऊपर वर्णित अनुसार custom SOAP headers जैसे सुरक्षा प्रमाण-पत्रों का उपयोग करते समय अक्सर ऐसा हो सकता है)।

+0

क्या आप एक उदाहरण प्रदान कर सकते हैं? –

+0

@JL - मेरे उत्तर (पहले लिंक) में सोपएक्सप्शन क्लास लिंक में "कस्टम" त्रुटि संदेश फेंकने के लिए वीबी और सी # दोनों में उदाहरण कोड शामिल है। माना जाता है कि यह XmlNode ऑब्जेक्ट को मैन्युअल रूप से बनाने और जोड़ने के द्वारा विस्तारित संपत्ति बनाता है, लेकिन इसे कुछ एक्सएमएल द्वारा प्रतिस्थापित किया जा सकता है जो आपके ऑब्जेक्ट को क्रमबद्ध करने से बनाया गया है, शायद System.Xml.Serialization.XmlSerializer क्लास का उपयोग कर। यहां देखें: http://support.microsoft.com/kb/815813 – CraigTP

+0

बिल्कुल सही उत्तर! धन्यवाद क्रेग ... मैं मानक एसओएपी अपवाद के साथ जाने के बजाय किसी कस्टम त्रुटि ऑब्जेक्ट को वापस करने का प्रयास करने की अत्यधिक अनुशंसा करता हूं। इसका मानकीकृत, इसलिए इस तरह की कार्रवाई करने के लिए औचित्य साबित करना आसान है। –

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

  • कोई संबंधित समस्या नहीं^_^