मेरे पास बहुत सी विरासत कोड है जो अब डब्लूसीएफ आरईएसटी सेवा के लिए बैकएंड है - अगर यह मायने रखता है, तो यह सामान्य डब्लूसीएफ सेवा बैकएंड होता था। मैं एक ऐसी तंत्र को कार्यान्वित करना चाहता हूं जो किसी भी विधि में किसी भी अपवाद को पकड़ ले और इसका विश्लेषण करे। यदि यह एक ज्ञात त्रुटि साबित होता है, तो इसे संसाधित किया जाएगा और एक दोस्ताना दिखने वाली गलती में बदल दिया जाएगा।डब्ल्यूसीएफ आरईएसटी सेवाएं - जेनेरिक अपवाद हैंडलिंग
मुझे पता है कि मैं 'सामान्य' अपवादों के बजाय FaultException
या WebProtocolException
फेंक सकता हूं, लेकिन ऐसे कई स्थान हैं जहां सभी कोड अपवादों को फेंक दिया जाता है, और उन सभी को ढूंढना काफी दर्दनाक विकल्प है।
मैंने एक एंडपॉइंट व्यवहार एक्सटेंशन जोड़ने की कोशिश की जो एक नया व्यवहार बनाता है जो मानक WebHttpBehavior.AddServerErrorHandlers
विधि को ओवरराइड करता है और एंड्रॉइड प्रेषक त्रुटि हैंडलर संग्रह में मेरे त्रुटि हैंडलर (IErrorHandler
कार्यान्वयन) जोड़ता है। त्रुटि हैंडलरों के अंदर मैं अपवाद का विश्लेषण करता हूं और इस अपवाद पर वांछित गलती बेसिंग (या नहीं बना) बनाता हूं।
मुझे उम्मीद है कि इस तंत्र को किसी भी ज्ञात अपवाद के लिए कस्टम डेटा वापस करने की उम्मीद है, लेकिन मैं गलत था। अच्छे पुराने माइक्रोसॉफ्ट एक अद्भुत अपरिहार्य WebHttpBehavior2
है, जो बिना शर्त endpoint डिस्पैचर त्रुटि संचालकों संग्रह के अंत में एक आंतरिक Microsoft.ServiceModel.Web.WebErrorHandler
कहते हैं लागू किया गया है। यह हैंडलर पहले से निष्पादित हैंडलर को अनदेखा करता है और अपवादों का केवल एक छोटा सेट पहचानता है, जबकि बहुमत को "आंतरिक सर्वर त्रुटि" के रूप में व्याख्या किया जाता है, और कुछ भी नहीं।
सवाल यह है कि क्या मैं सही रास्ते पर हूं और डब्ल्यूसीएफ आरईएसटी तंत्र में इस हैंडलर को अक्षम करने का एक तरीका है, या इसे एक नए अपवाद के साथ पेश करें (उदाहरण के लिए, जब कोई अपवाद पकड़ा जाता है, तो यह पहली बार मेरे द्वारा संसाधित किया जाता है संचालकों और अगर वे,/वापसी फेंक उदाहरण के लिए, FaultException, तो यह नया अपवाद मूल एक के बजाय Microsoft.ServiceModel.Web.WebErrorHandler
) के लिए आपूर्ति की है। यदि IErrorHandler
और व्यवहार एक्सटेंशन के साथ मेरे सभी प्रयोग बेकार हैं, तो वैकल्पिक क्या है? दोबारा, मैं वास्तव में अपवाद फेंकने तर्क को संशोधित नहीं करना चाहता, मैं चाहता हूं कि एक स्थान अपवादों को पकड़ने और उन्हें संसाधित करने के लिए।
बहुत बहुत धन्यवाद!
इस तरह पकड़, सही हर सेवा विधि करने के लिए जोड़ा जाना चाहिए? या क्या सभी अपवादों को संभालने के लिए इसे सिर्फ एक बार लिखने का कोई तरीका है? मुझे व्यवहार-आधारित दृष्टिकोण पसंद आया क्योंकि यह सभी अपवादों के लिए एक सामान्य हैंडलर परिभाषित करता था, और मुझे प्रत्येक विधि के लिए अपवादों को संभालने और संसाधित करने की चिंता करने की आवश्यकता नहीं थी। सबसे अच्छी बात यह है कि मैंने एंडपॉइंट में सभी सेवाओं के लिए एक प्रोसेसर परिभाषित किया। मैं आपके दृष्टिकोण का उपयोग करके इसे प्राप्त नहीं कर सकता, क्या मैं कर सकता हूं? –
'स्थिति डिस्क्रिप्शन' को सेट करने से कोई प्रभाव नहीं पड़ता है! प्रतिक्रिया हमेशा सामान्य स्थिति विवरण है। इसे ठीक करने का कोई तरीका है? – Hemant
इसमें है।आप इसे फिडलर का उपयोग कर सर्वर से आउटगोइंग संदेश में देख सकते हैं .... लेकिन जो आपको लगता है वह यह है कि विभिन्न ब्राउज़रों या विभिन्न कार्यान्वयन विवरण को अनदेखा कर सकते हैं और कोड को पूर्वनिर्धारित संदेश पर मैप करने के लिए उपयोग कर सकते हैं। मेरे पास एक एंड्रॉइड ऐप था जो मैं कर रहा था और मैं विवरण सेट अप करने के साथ-साथ विधि हस्ताक्षर को बदलना समाप्त कर दिया ताकि मैं एक स्ट्रिंग वापस कर सकूं। ओह! ** यही कारण है कि मैं कभी भी डब्लूसीएफ आरईएसटी का कभी भी उपयोग नहीं करूंगा। ** – Aliostad