मेरे पास एएसपी.नेट वेब सेवा है (डब्ल्यूसीएफ नहीं बल्कि क्लासिक .asmx वेबमाइड्स के साथ) जो अपवाद फेंकता है। अपवाद सभी दो आधार अपवाद वर्गों (जो दोनों के अपवाद से निकाले जाते हैं) में से एक से निकाले जाते हैं:मैं एएसपीनेट वेब सेवा द्वारा फेंकने वाले अपवाद के प्रकार को कैसे निर्धारित कर सकता हूं?
public class InputException : Exception
{
....
}
public class FatalException : Exception
{
....
}
public class NoFilesFound: FatalException
{
....
}
....
वेब सेवा अभी अपवाद के रूप में की जरूरत फेंकता है। (के रूप में देखा है जब मैं .GetType() पकड़ा अपवाद पर करते हैं)
Server was unable to process request. ---> There were no files found
हालांकि अपवाद प्रकार FaultException की है: मेरे मुवक्किल कोड में मैं अपवाद पकड़ कर सकते हैं और इस तरह से संदेश दिखाई। कॉलिंग क्लाइंट को इनपुट इनपुट और फ़ैटलएक्सप्शन के बीच अंतर करने में सक्षम होना चाहिए (और व्यक्तिगत व्युत्पन्न लोगों के बीच बेहतर रूप से भिन्न होना चाहिए लेकिन यह उतना महत्वपूर्ण नहीं है)। अभी ऐसा करने का एकमात्र तरीका संदेश को पार्स करना है, टेक्स्ट को "--->" से पहले पट्टी करें और टेक्स्ट पर स्विच करें। यह स्पष्ट रूप से इष्टतम नहीं है।
मुझे पता है कि मैं कस्टम कोड के साथ साबुन अपवाद फेंक सकता हूं लेकिन यदि संभव हो तो मैं इससे बचना चाहता हूं। इसके अलावा यह उन लोगों के लिए डिज़ाइन किया गया है जो एक्सएमएल से निपटते हैं लेकिन हमारे सभी webservice कोड XML को स्पर्श नहीं करते हैं क्योंकि यह हमारे लिए पहले से ही deserialized है।
तो संक्षेप में, क्या मेरे लिए webservice से कस्टम अपवाद फेंकने और कॉल करने वाले क्लाइंट के अपवादों के बीच अंतर करने में सक्षम होने का कोई तरीका है?
धन्यवाद! मुझे आश्चर्य होगा कि क्या मैं अपने कस्टम वर्गों को सोपएक्सप्शन से प्राप्त कर सकता हूं और फिर XmlNodes बनाने के लिए कन्स्ट्रक्टर का उपयोग कर सकता हूं ... – user1079591
@ user1079591, हाँ, आप कर सकते हैं और यह वास्तव में आगे बढ़ने का एक बहुत अच्छा तरीका है। –
इसलिए मैंने सुझाव दिया जैसा कि आपने सुझाव दिया था लेकिन क्लाइंट कोड में यह इसे साबुन अपवाद के रूप में नहीं पकड़ रहा है बल्कि एक सिस्टम के रूप में है। ServiceModel.FaultException। मेरे कोड में मेरे पास दो कैच ब्लॉक हैं: एक सोपएक्सप्शन के लिए और एक नियमित अपवाद के लिए और यह हमेशा नियमित अपवाद पर जाता है और जब मैं करता हूं।जेनेरिक पर) GetType() यह कहता है कि यह System.ServiceModel.FaultException प्रकार है। – user1079591