2010-10-19 20 views
6

मैंने एक साधारण डब्ल्यूसीएफ (.NET 3.5) सेवा बनाई है जो 10 अनुबंधों को परिभाषित करता है जो मूल रूप से आपूर्ति किए गए डेटा पर गणना करते हैं। फिलहाल मुझे उम्मीद है कि इन कुछ अनुबंधों में से कुछ को कॉल करने के लिए कुछ ग्राहक हैं। मैं सेवा को और अधिक उत्तरदायी कैसे बना सकता हूं? मुझे एहसास है कि सेवा तब तक प्रतीक्षा करेगी जब तक कि वह अगले अनुरोध पर जाने के अनुरोध को संसाधित न करे। चीजों को गति देने के लिए मैं डब्ल्यूसीएफ में मल्टीथ्रेडिंग का उपयोग कैसे कर सकता हूं?डब्ल्यूसीएफ सेवा और थ्रेडिंग

+0

जब मैं कहता हूं कि आप धीमी प्रतिक्रियाओं का अनुभव करते हैं तो मैं आपको ठीक समझ रहा हूं? क्लाइंट प्रति मिनट कितने कॉल करता है कहते हैं। और धीमा क्या है? –

उत्तर

18

जब मैं Justin's answer से सहमत हैं, मेरा मानना ​​है कि कुछ और प्रकाश कैसे WCF काम करता है पर यहाँ डाला जा सकता है।

मुझे लगता है कि सेवा इंतजार करेंगे जब तक यह करने के लिए एक अनुरोध पर कार्रवाई अगले एक करने के लिए जाना है:

आप विशिष्ट बयान। ऊपर की गति को गति देने के लिए मैं डब्ल्यूसीएफ में मल्टीथ्रेडिंग का उपयोग कैसे कर सकता हूं?

सेवा की सहमति (यह कितनी कॉल एक साथ ले सकती है) सेवा से जुड़ी ConcurrencyMode value for the ServiceBehavior पर निर्भर करती है। डिफ़ॉल्ट रूप से, यह मान ConcurrencyMode.Single है, जिसका अर्थ है कि यह एक दूसरे के बाद कॉल को क्रमबद्ध करेगा।

हालांकि, यह आपके विचार के मुकाबले जितना अधिक मुद्दा नहीं हो सकता है। यदि आपकी सेवा InstanceContextModeInstanceContextMode.PerCall के बराबर है तो यह एक गैर-समस्या है; आपकी सेवा का एक नया उदाहरण प्रति कॉल बनाया जाएगा और किसी अन्य कॉल के लिए उपयोग नहीं किया जाएगा।

यदि आपके पास सिंगलटन या सत्र-आधारित सेवा ऑब्जेक्ट है, तो सेवा कार्यान्वयन के उस उदाहरण के लिए कॉल को क्रमबद्ध किया जाएगा।

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

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

बेशक, यह को लागू करने वाला कोड है या नहीं, यह सेवा कुशल है। यह निश्चित रूप से ऐसा कुछ है जिसे देखने की आवश्यकता होती है, जब आप इंगित करते हैं कि यह मामला है।

3

यह निश्चित रूप से पूर्व परिपक्व अनुकूलन है। अपनी सेवाओं को पहले कार्यान्वित करें और देखें कि कोई समस्या है या नहीं।

मुझे लगता है कि आप पाएंगे कि आप कुछ भी नहीं कर रहे हैं। सर्वर अनुरोध अनुरोध के रूप में एक अनुरोध पर अवरुद्ध नहीं होगा। आईआईएस/डब्ल्यूसीएफ को आपके लिए चीजों को अच्छी तरह से संभालना चाहिए।

1

मैं डब्ल्यूसीएफ से परिचित नहीं हूं, लेकिन क्या प्रक्रिया एसिंक हो सकती है? यदि आप बड़ी मात्रा में डेटा और गहन गणना की उम्मीद कर रहे हैं, तो एक विकल्प id भेजने के लिए हो सकता है, एक अलग थ्रेड में मानों की गणना करें और फिर प्रारंभिक id का उपयोग करके परिणाम वापस करने के लिए एक विधि प्रदान करें।

कुछ की तरह:

int id = Service.CalculateX(...); 
... 
var y = Service.GetResultX(id); 
संबंधित मुद्दे