2011-05-31 13 views
10

मैं ऑनलाइन बहुत सारे डब्ल्यूसीएफ लेख पढ़ रहा हूं और ऐसा लगता है कि ज्यादातर लोग चैनलफैक्टरी ऑब्जेक्ट्स को कैश करते हैं लेकिन चैनल नहीं। ऐसा लगता है कि ज्यादातर लोग चैनल कैशिंग का उपयोग करने से डरते हैं क्योंकि वे नेटवर्क दोषों को संभालना नहीं चाहते हैं जो कैश किए गए चैनल को अनुपयोगी प्रदान कर सकते हैं। लेकिन इसे विधि पर संचार अपवाद को पकड़कर आसानी से तय किया जा सकता है, चैनल को फिर से बनाया जा सकता है, और प्रतिबिंब का उपयोग करके विधि को फिर से चलाया जा सकता है।डब्ल्यूसीएफ चैनल कैशिंग क्यों खराब चीज है?

फिर ऐसे लोग हैं जो सोचते हैं कि चैनल कैशिंग करना बुरा है क्योंकि सभी संचार एक चैनल से गुजरेंगे। निम्नलिखित लेख देखें।

http://social.msdn.microsoft.com/Forums/is/wcf/thread/9cbdf92a-a749-40ce-9ebe-3f2622cd78ee

इस जरूरी एक बुरी बात है? क्या आप थ्रेड में चैनल साझा नहीं कर सकते? क्या प्रदर्शन भुगतना होगा क्योंकि इस एकल चैनल में कई विधि कॉल किए जाएंगे, जो क्रमशः संसाधित हो जाएंगे?

मुझे सबूत नहीं मिला है कि चैनल साझा करना प्रदर्शन को कम कर देगा। मुझे जो मिला वह यह है कि एक कैश किए गए चैनल का उपयोग गैर-कैश किए गए चैनल का उपयोग करने से लगभग 5 गुना तेज है, भले ही इसका मतलब कैश किए गए चैनलों पर विधियों को कॉल करने के लिए प्रतिबिंब का उपयोग करना है।

अन्य लाभ सभी अपने WCF बंद कॉल करने के लिए ट्राई/कैच/अंत में बयान के साथ कहता है (चारों ओर हो रही है नहीं), बीच में बंद करें(), या() फेंक चैनल पर जब आप इसे के साथ किया जाता है। मेरे लिए ऐसा लगता है कि डब्ल्यूसीएफ ने डेवलपर्स को डब्ल्यूसीएफ चैनल संसाधनों का प्रबंधन करने के लिए मजबूर कर गलत दिशा में एक कदम उठाया। .NET Remoting में, आपने एक्टिवेटर क्लास का उपयोग करके प्रॉक्सी बनाया और इसे साफ़ करने के लिए आपको कुछ भी करने की ज़रूरत नहीं थी। .NET Framework ने आपके लिए यह सब संभाला।

+0

यह एक अच्छा सवाल है। –

उत्तर

10

2 मुख्य कारण:

  1. एक ChannelFactory बनाने के लिए महंगा है और यह धागा सुरक्षित => कैशिंग के लिए एकदम सही उम्मीदवार है।
  2. चैनल फैक्ट्री द्वारा उत्पन्न एक चैनल बनाने के लिए महंगा नहीं है लेकिन यह थ्रेड सुरक्षित नहीं है (वास्तव में यह वास्तव में धागा सुरक्षित है लेकिन समवर्ती कॉल अवरुद्ध हो जाएंगे और अनुक्रमिक रूप से निष्पादित किए जाएंगे) => इसे बहुप्रचारित वातावरण में कैश न करें ।

यहां एक nice article है जो आगे के विवरण में जाता है।

+0

मुझे विश्वास नहीं है कि यह सच है। चैनल थ्रेड सुरक्षित हैं। – Bart

+0

@ टॉम सी यहाँ एक [अच्छा आलेख] है (http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and- सर्वोत्तम प्रथाओं .aspx) जो आगे के विवरण में जाता है। इसके अनुसार चैनल वास्तव में थ्रेड सुरक्षित हैं लेकिन समवर्ती पहुंच को अवरुद्ध करेंगे और क्रमशः उन्हें निष्पादित करेंगे। –

+0

उपयोग किए जा रहे डब्ल्यूसीएफ विकल्पों के आधार पर चैनलों में एक निश्चित सत्र के लिए विशिष्ट राज्य हो सकता है। तो सबसे अच्छी सलाह निश्चित रूप से है: कारखाना कैश करें, चैनल नहीं। –

संबंधित मुद्दे