वैसे, इस मामले में 'मानक' अपवाद हैं, और 'कस्टम' अपवाद (जिन्हें सेवा डेवलपर द्वारा 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
संपत्ति सत्य पर सेट है।
लिंक के लिए धन्यवाद। मुझे पता है कि उन अपवादों के बीच अंतर कैसे होना चाहिए जिन्हें पकड़ लिया जाना चाहिए और अपवाद जो कि बबल होना चाहिए - इसलिए यह प्रश्न। हालांकि, जेनरेट कोड में कोई भी /// टैग या कुछ भी अपवादों को फेंकने के बारे में संकेत नहीं है। –
vidstige
निम्नलिखित [धागा] चेक [1] [1]: http://stackoverflow.com/questions/264747/finding-out-what-exceptions-a-method-might-throw-in- सी-तेज – Tomtom