मान लें कि हमारे पास एक सेवा विधि है जो कुछ सुरक्षा जांच करता है, डीबी और तृतीय पक्ष वेब सेवा से डेटा पुनर्प्राप्त करता है, MyDataDTO
बनाता है, डीबी में एक लेखापरीक्षा प्रविष्टि लिखता है। और हम अच्छी तरह से संरचित, दानेदार त्रुटि कोड चाहते हैं, है ना? हम अच्छे लड़के हैं और मानक WCF त्रुटि हैंडलिंग के दिशा-निर्देशों का पालन करें:वास्तविक दुनिया में डब्ल्यूसीएफ गलती अनुबंध
[FaultContract(typeof(AccessDenied))]
[FaultContract(typeof(KeyNotFound))]
[FaultContract(typeof(WsFault))]
[FaultContract(typeof(DbFault))]
MyDataDTO GetData(string key);
अब हम एक नई पद्धति डेटा अद्यतन करता है कि जोड़ रहे हैं। विधि GetData()
आंतरिक रूप से (या इसका मुख्य हिस्सा) कहती है, प्रमाणीकरण निष्पादित करता है डेटा अपडेट करता है।
[FaultContract(typeof(InvalidState))]
[FaultContract(typeof(DataNotValid))]
[FaultContract(typeof(AccessDenied))]
[FaultContract(typeof(KeyNotFound))]
[FaultContract(typeof(WsFault))]
[FaultContract(typeof(DbFault))]
void UpdateData(MyDataDTO data);
अब तक तो अच्छा: तो यह GetData()
दोहराया के सभी दोष है प्लस अपने स्वयं के दोष को जोड़ना होगा। यह हमें XML उत्पन्न करने के लिए भी अनुमति देता है जो हम अपनी सेवा के उपभोक्ताओं के लिए प्रदान कर सकते हैं ताकि वे जान सकें कि वे कौन से त्रुटि कोड की उम्मीद कर सकते हैं।
अब कल्पना करें कि हमारे पास 10 विधियों के साथ 10 सेवाएं हैं (या इससे भी अधिक जटिल) प्रत्येक। और उन सभी गलती ठेके को परिभाषित हो जाता है इस के रूप में बुरा सपना काफी त्रुटि प्रवण प्रक्रिया है:
- आप गारंटी नहीं दे सकते कि एक गलती पर परिभाषित पूरे सेवा
- के लिए (DbFault) की तरह सामान्य दोष को परिभाषित करने का कोई तरीका नहीं है एक ऑपरेशन अनुबंध वास्तव में (कॉपी-पेस्ट मुद्दों)
- आप गारंटी नहीं दे सकते कि आप आपरेशन अनुबंध में जोड़ने के लिए कुछ गलती याद नहीं था लौटा दी जाएगी
यहाँ खाता इंटरफ़ेस संस्करण में नहीं लेते हैं :)
+०१२३५१६४१०६१तो अगर आप उत्पादन में डब्ल्यूसीएफ सेवाओं का समर्थन करते हैं तो आपको तस्वीर मिल गई है। क्या हमें गलती अनुबंधों को छोड़ देना चाहिए और अच्छी पुरानी सी-शैली का उपयोग करना चाहिए (जैसे त्रुटि DTOBase
कक्षा त्रुटि कोड के साथ)? त्रुटि ग्रैन्युलरिटी कम करें? यह सुनिश्चित करने के लिए कि दस्तावेज़ सही/अद्यतित है? मुझे कुछ बेहतरीन प्रथाओं में दिलचस्पी है।
खुद से पूछने की एक बात यह है कि क्या आपके ग्राहक वास्तव में उन ग्रैनुलर त्रुटि कोड _using_ होंगे। क्या वे वास्तव में कौन सी गलती वापस आती हैं, या वे केवल त्रुटि संदेश प्रदर्शित करने के आधार पर अलग-अलग कार्रवाइयां कर रहे हैं? –
अधिकतर प्रदर्शित। यह विभिन्न कार्यों के बजाय तेजी से समस्या निदान के लिए है। – UserControl
फिर आपको केवल एक ही FaultContract की आवश्यकता है जिसमें 'संदेश' स्ट्रिंग है। –