2012-04-18 16 views
9

मैंने "सेवा जोड़ें संदर्भ ..." का उपयोग कर विजुअल स्टूडियो 2010 में एक वेब सेवा जोड़ा है। यह Reference.cs नामक फ़ाइल में कुछ कोड उत्पन्न करता है। अब, अगर मैं उन तरीकों में से एक को कॉल करता हूं जो मुझे नहीं पता कि विधि क्या फेंक सकती है। संभवतः यह SocketException या IOException जैसे नेटवर्क से संबंधित अपवादों को फेंक सकता है?जेनरेट किए गए सेवा संदर्भ में कौन से अपवाद फेंक सकते हैं?

.NET में नियमित तरीकों को एमएसडीएन पर या स्रोत कोड के अंदर जांचने के लिए जांच की जा सकती है कि क्या अपवाद फेंक सकते हैं, उदाहरण के लिए File.Open। यहां यह स्पष्ट है कि बाद के चरण में त्रुटि संदेशों को दिखाने के लिए मुझे क्या अपवाद और पकड़ना चाहिए।

उन जेनरेट किए गए तरीकों के लिए, मैं कैसे जान सकता हूं कि वे क्या अपवाद फेंक सकते हैं?

+0

लिंक के लिए धन्यवाद। मुझे पता है कि उन अपवादों के बीच अंतर कैसे होना चाहिए जिन्हें पकड़ लिया जाना चाहिए और अपवाद जो कि बबल होना चाहिए - इसलिए यह प्रश्न। हालांकि, जेनरेट कोड में कोई भी /// टैग या कुछ भी अपवादों को फेंकने के बारे में संकेत नहीं है। – vidstige

+0

निम्नलिखित [धागा] चेक [1] [1]: http://stackoverflow.com/questions/264747/finding-out-what-exceptions-a-method-might-throw-in- सी-तेज – Tomtom

उत्तर

14

वैसे, इस मामले में 'मानक' अपवाद हैं, और 'कस्टम' अपवाद (जिन्हें सेवा डेवलपर द्वारा FaultContact के रूप में परिभाषित किया गया है और सेवा अनुबंध संदर्भ में मौजूद हैं)।

पहली बार आपकी चिंताओं में, मुझे लगता है कि CommunicationException और TimeoutException हैं; इन्हें ICommunicationObject.BeginOpen और ICommunicationObject (base of the model) के अन्य 'उद्घाटन' विधियों के लिए संभावित अपवाद दस्तावेज किए गए हैं। CommunicationObjectFaultedException को 'बंद करने' विधियों के लिए दस्तावेज किया गया है। IRequestChannel.Request जैसे संदेश भेजने वाले तरीकों के लिए QuotaExceededException भी है। many more that might be के बीच, ये खोजे जाने योग्य हैं।

टिप्पण वर्थ, एक MSDN लेख ऊपर लिंक से, यह है:

सभी अपवाद चैनलों द्वारा फेंका होना चाहिए या तो एक System.TimeoutException, System.ServiceModel.CommunicationException, या एक प्रकार CommunicationException से ली गई। (जैसे ObjectDisposedException के रूप में अपवाद भी फेंक दिया जा सकता है लेकिन केवल संकेत मिलता है कि बुला कोड चैनल का दुरुपयोग किया गया है। एक चैनल को सही ढंग से प्रयोग किया जाता है, तो वह केवल दिए गए अपवाद फेंक चाहिए।)

तो फिर वहाँ 'दोष' है, जो सेवा साइड पर उठाया अपवाद हैं और (संभावित, सक्षम होने पर) कर रहे हैं फोन करने वाले के लिए विस्तृत कर रहे हैं, फोन करने वाले तो उस को संभालने या उचित क्लाइंट साइड अपवाद फेंक कर सकते हैं:

जब पैदा एक गलती, कस्टम चैनल को गलती सीधे नहीं भेजनी चाहिए, बल्कि, यह नहीं होना चाहिए एक अपवाद को फेंक दें और से ऊपर की परत को यह तय करें कि उस अपवाद को किसी गलती में परिवर्तित करना है और को कैसे भेजना है।

चैनल State आपको सूचित करने के लिए करने के लिए किया जा जब ऐसी हालत यह पहुंच गया, और शायद कार्य सदस्यता ले सकते हैं कि कौन सा Faulted की एक घटना प्रदान करता है। डिफ़ॉल्ट रूप से (दमन को कॉन्फ़िगर किए बिना (?)) दोषों को प्रबंधित अपवाद के रूप में उठाया जाएगा; फिर, दोहराते हैं:

WCF ग्राहकों में, सोप दोष है कि संचार के दौरान हो क्लाइंट अनुप्रयोग के हित के लिए कामयाब अपवाद के रूप में उठाया जाता है रहे हैं। हालांकि किसी भी प्रोग्राम के निष्पादन के दौरान कई अपवाद हैं, डब्ल्यूसीएफ क्लाइंट प्रोग्रामिंग मॉडल का उपयोग कर अनुप्रयोग संचार के परिणामस्वरूप [...] दो प्रकार के अपवादों को संभालने की उम्मीद कर सकते हैं।

और this refers againCommunicationException और TimeoutException ऊपर उल्लेख किया है।

अन्त में, अब के लिए कम से कम, अप्रत्याशित है:

FaultException अपवाद जब एक श्रोता एक गलती कि उम्मीद या ऑपरेशन अनुबंध में निर्दिष्ट नहीं किया गया है प्राप्त करता है फेंक दिया जाता है; आम तौर पर यह तब होता है जब एप्लिकेशन को डीबग किया जा रहा है और सेवा System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults संपत्ति सत्य पर सेट है।

+0

संदर्भों और सभी के साथ महान जवाब! वास्तव में पहले उद्धरण पसंद आया। पूरी तरह से मेरे प्रश्न का उत्तर दिया - मुझे CommunicationException पकड़ना चाहिए और शेष बबल को तब तक चलाना चाहिए क्योंकि वे इंगित करते हैं कि मैं (या जेनरेट कोड) चैनल विधियों का गलत तरीके से उपयोग करता हूं। – vidstige