2009-11-05 1 views
5

मैं डब्लूसीएफ सेवा का उपभोग कर रहा हूं और वीएस 2008 सेवा संदर्भ का उपयोग करके अपनी प्रॉक्सी बनाई है।डब्ल्यूसीएफ क्लाइंट प्रॉक्सी प्रारंभिक

मैं सबसे अच्छा पैटर्न कॉल करने के लिए WCF सेवा विधि

  • मैं ग्राहक प्रॉक्सी उदाहरण हर बार जब मैं सेवा विधि कॉल और जैसे ही मुझे लगता है कि के साथ किया हूँ ग्राहक बंद बनाना चाहिए रहा हूँ? जब मैंने अपने क्लाइंट एप्लिकेशन को प्रोफाइल किया, तो मैं देख सकता था कि प्रॉक्सी क्लाइंट
  • प्रारंभ करते समय चैनल प्राप्त करने में काफी समय लग रहा है, क्या मुझे क्लाइंट प्रॉक्सी के लिए सिंगलटन पैटर्न का उपयोग करना चाहिए ताकि मैं केवल एक बार उदाहरण का उपयोग कर सकूं और प्राप्त कर सकूं फिर से शुरू करने वाले ओवरहेड से छुटकारा पाएं? क्या इस दृष्टिकोण के साथ कोई छिपी समस्या है?

मैं नेट फ्रेमवर्क 3.5 एसपी 1 का उपयोग कर रहा हूं, बुनियादी अनुकूलन छोटे अनुकूलन के साथ बाध्यकारी।

+0

@ 123 डेवलपर: बढ़िया - धन्यवाद! (यह नवागंतुकों को आसानी से "स्पष्ट" नहीं है - मैं सहमत हूं - यही कारण है कि मैं इसे इंगित करता हूं) –

उत्तर

10

यह निर्भर करता है ;-)

आप अपने एप्लिकेशन में एक दृश्य है कि एक के बाद एक कई कॉल की आवश्यकता है, तो आप प्रॉक्सी क्लाइंट के लिए पर लटका और इसे का उपयोग आगे कॉल करने के लिए रख सकते हैं। चेतावनी दी जानी चाहिए कि "दोषपूर्ण" स्थिति की जांच करने के लिए - यदि सर्वर पर कोई त्रुटि होती है, तो क्लाइंट प्रॉक्सी और सर्वर के बीच का चैनल "गलती" हो सकता है और इस प्रकार आपका क्लाइंट प्रॉक्सी अनुपयोगी हो जाता है।

इसके अलावा - महंगा हिस्सा ChannelFactory<T> की रचना है - जब आप कोड में अपने ग्राहक proyx बनाने आप इन दो चरणों को अलग करने की कोशिश कर सकते: उस चैनल कारखाने, उदा करने पर

ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>(); 

हैंग कैश इसे कहीं

दूसरे चरण के लिए बहुत कम समय के संदर्भ और हॉर्स पावर में गहन होना चाहिए:

IYourService client = factory.CreateChannel(); 

आप हर कॉल करने से पहले इस कदम कर सकता है (या क्रम कहते हैं) और बाहर बुरा प्रदर्शन नहीं मिलना चाहिए उसमें, वास्तव में।

जब भी संभव हो, मैं सिंगलटन से बचने की दृढ़ता से अनुशंसा करता हूं - यह कीड़े के एक खोल को खोलने जैसा है, इसे तब तक न करें जब तक कि आप बिल्कुल, सकारात्मक रूप से (उदाहरण के लिए एक ऐसे संसाधन तक पहुंच प्रबंधित न करें जो केवल एक कॉलर के लिए उपलब्ध हो एक वक़्त)।

मार्क

+1

मैं एकल फैक्ट्री उदाहरण बनाने के दृष्टिकोण से सहमत हूं, और सिंगलटन चैनल के उदाहरण नहीं हैं। चैनलों के लिए, एम और ढीला एम का उपयोग करें, और दोषपूर्ण स्थिति की जांच करके उन्हें ठीक से बंद करना सुनिश्चित करें। – CodingWithSpike

0

एक पुराने सवाल को लात के लिए खेद है, लेकिन मैं आसान संदर्भ के लिए यह जोड़ना चाहते थे।

मैं पूरी तरह से marc_s और rally25rs से सहमत हूं। तो वहां से शुरू करें, लेकिन एक प्रॉक्सी या रैपर का उपयोग करने पर विचार करें जो दोषपूर्ण राज्यों को संभालता है। एसओ पर Here is a question जो कुछ समाधानों पर चर्चा करता है, और here is another अच्छा समाधान मैं इंटरनेट पर कॉर्नेलियू द्वारा आया, "एक पुन: प्रयोज्य क्लाइंटबेस प्रॉक्सी" का निर्माण। उनका समाधान रैपर उत्पन्न करता है जो अधिकतम सुविधा और प्रदर्शन के लिए आपकी सेवा विधियों का पर्दाफाश करता है। मुझे अभी भी परीक्षण करना होगा यदि यह काम करता है :)।

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