"जल्दी" WCF के दिनों में WCF ग्राहक प्रॉक्सी जारी करने के लिए आमतौर पर स्वीकार किया जिस तरह से हुआ करता था कि।
हालांकि चीजें बदल गई हैं। यह पता चला कि IClientChannel<T>.Dispose() का कार्यान्वयन केवल IClientChannel<T>.Close() विधि को आमंत्रित करता है, जो कुछ परिस्थितियों में अपवाद फेंक सकता है, जैसे अंतर्निहित चैनल खुला नहीं है या समय पर फैशन में बंद नहीं किया जा सकता है।
इसलिए Close()
को catch
ब्लॉक के भीतर डालने का अच्छा विचार नहीं है क्योंकि अपवाद के मामले में कुछ अप्रकाशित संसाधनों के पीछे छोड़ सकते हैं।
नई तरह से सिफारिश की बजाय catch
ब्लॉक के भीतर IClientChannel<T>.Abort() आह्वान करने के लिए, मामला Close()
में विफल हो जाएगा है। यहाँ एक उदाहरण है:
try
{
channel.DoSomething();
channel.Close();
}
catch
{
channel.Abort();
throw;
}
अद्यतन:
यहाँ एक MSDN लेख कि describes this recommendation के लिए एक संदर्भ है।
स्रोत
2012-01-30 12:37:26
यह प्रतिक्रिया थोड़ा सा है: यह चैनल फैक्ट्री के लिए उपयोग पैटर्न प्रदान करता है, जबकि मूल प्रश्न में चैनल शामिल होता है। हालांकि यह सच है (मेरा मानना है कि कारखाने को बंद करने से सभी चैनलों को बंद कर दिया जाएगा, एक चैनल को रखने के लिए एक और आम पैटर्न है कारखाना खोलना ताकि यह कई चैनल कुशलता से बना सके। फैक्ट्री को काम के लिए खोलते समय प्रत्येक चैनल को व्यक्तिगत रूप से बंद किया जाना चाहिए। –
यह सच है - इसे इंगित करने के लिए धन्यवाद। –
@ ÖrjanJämte को प्रतिबिंबित करने के लिए समायोजित पोस्ट को –