संक्षिप्त उत्तर यह है कि वेब सेवा प्रॉक्सी क्लासेस के साथ, आपको उन्हें बंद करना चाहिए और उन्हें निपटाना नहीं चाहिए।
लगभग हर मामले में आपको उन चीज़ों का निपटान करना चाहिए जो IDISposable लागू करते हैं। हालांकि, वेब सेवा प्रॉक्सी कक्षाएं एक विशेष मामला हैं।इन कक्षाओं और System.ServiceModel.ClientBase
से प्राप्त होने वाली सभी कक्षाओं के साथ, कॉल निपटान के लिए यह सर्वोत्तम अभ्यास है लेकिन बंद विधि को सीधे कॉल करने के लिए।
परावर्तक का उपयोग करके, आप देख सकते हैं कि Dispose
ClientBase
की विधि बस Close
पर कॉल करती है। तो यदि कोई अपवाद नहीं है, Dispose
और Close
वही काम करेंगे। हालांकि अगर कोई अपवाद है, तो अलग-अलग व्यवहार होंगे।
क्योंकि Close
विधि अपवाद फेंक सकती है, आपको इसे सीधे कॉल करना चाहिए और इसे अपवाद पकड़ना चाहिए। यदि आप Dispose
विधि को कॉल करते हैं, तो आपको अपवाद भी पकड़ना चाहिए, लेकिन आपका कोड समझना मुश्किल होगा।
इसका यह भी अर्थ है कि आपको using
कथन में प्रॉक्सी की घोषणा डालने से बचना चाहिए। इस मामले में, यदि using
ब्लॉक में कोई अपवाद फेंक दिया गया है, तो यह अस्पष्ट हो जाएगा। Dispose
कॉल जो using
ब्लॉक द्वारा स्वतः उत्पन्न होता है उसे कॉल किया जाएगा क्योंकि यह finally
ब्लॉक में है। Dispose
में Close
से फेंक दिया गया अपवाद पहले से फेंक दिया गया अपवाद अस्पष्ट करेगा।
अधिक विस्तृत explinations देखने के लिए, पर MSDN, Coding Up Style, BlogginAbout.Net, और StackOverflow ये लेख पढ़ें।
बैकस्ट्रीरी के लिए इसे इस तरह कार्यान्वित क्यों किया जाता है, इस धागे को MSDN forums पर देखें।
ध्यान दें कि वे लिंक डब्लूसीएफ सेवा संदर्भों के लिए विशिष्ट हैं, न कि .NET 2.0 वेब संदर्भ। इससे कोई फर्क पड़ता है कि आप अपनी प्रॉक्सी कैसे बनाते हैं। – TrueWill