आपके प्रश्न का उत्तर बाध्यकारी पर निर्भर करता है जिसका आप उपयोग कर रहे हैं। इस व्यवहार को नियंत्रित करने वाली दो सेटिंग्स हैं: InstanceContextMode और ConcurrencyMode। इन दोनों सेटिंग्स को ServiceBehaviorAttribute में सेट किया गया है।
InstanceContextMode नियंत्रित करता है कि सेवा को तुरंत कैसे चालू किया जाता है। इसमें निम्नलिखित मान हैं:
परकॉल - प्रत्येक बार जब आप सेवा को कॉल करते हैं तो नया सेवा उदाहरण बनाया जाता है। यह बाइंडिंग पर उजागर सेवाओं के लिए डिफ़ॉल्ट व्यवहार है जो परिवहन सत्र, विश्वसनीय सत्र या सुरक्षा सत्र => BasicHttp बाइंडिंग, WebHttp बाइंडिंग का उपयोग नहीं करते हैं।
प्रति सत्र - प्रत्येक बार जब आप नई प्रॉक्सी इंस्टेंस से सेवा कॉल करते हैं तो नया सेवा उदाहरण बनाया जाता है। एक ही प्रॉक्सी से आने वाली किसी भी कॉल को उसी सेवा उदाहरण (उदाहरण पर सर्वर पर रहता है) द्वारा संभाला जाता है। डिफ़ॉल्ट रूप से बाद में कॉल 10 मिनट (प्राप्त टाइमआउट) के भीतर किया जाना चाहिए या सेवा उदाहरण जारी किया गया है। बाध्यकारी पर उजागर सेवाओं के लिए यह डिफ़ॉल्ट डिफ़ॉल्ट व्यवहार है जो परिवहन सत्र, विश्वसनीय क्षरण या सुरक्षा सत्र => WSHttp बाइंडिंग (डिफ़ॉल्ट सेटिंग सुरक्षा सत्र का उपयोग करता है), नेटटीसीपी बाइंडिंग, नेटनामयुक्त पाइप बाइंडिंग का उपयोग करता है।
एकल - सेवा का केवल एक उदाहरण मौजूद है और यह सभी कॉलों को संभालता है।यह सेवा उदाहरण तब बनाया जा सकता है जब होस्ट शुरू होता है या जब सेवा पहली बार कॉल की जाती है।
अब आप जानते हैं कि उदाहरण कैसे बनाए जाते हैं। दूसरी सेटिंग ConcurrencyMode नियंत्रित करती है कि कितने समवर्ती धागे एकल उदाहरण तक पहुंच सकते हैं। प्रत्येक अनुरोध हमेशा अलग धागे में संभाला जाता है।
सिंगल - केवल एक थ्रेड सेवा उदाहरण तक पहुंच सकता है। यह डिफ़ॉल्ट व्यवहार है।
पुनर्वित्तक - एक धागा सेवा तक पहुंच सकता है लेकिन यह लॉक जारी कर सकता है और अन्य धागे को उदाहरण का उपयोग करने की अनुमति देता है जबकि फ़र्ट थ्रेड अवरुद्ध हो जाएगा। इसका उपयोग कॉलबैक परिदृश्य में किया जाता है।
एकाधिक - एकाधिक थ्रेड सेवा उदाहरण तक पहुंच सकते हैं।
अब आप जानते हैं कि आवृत्ति का उपयोग कैसे किया जा सकता है। आइए कुछ संयोजनों पर एक नज़र डालें:
परकॉल इंस्टेंसिंग + एकल समरूपता - विशिष्ट स्टेटलेस परिदृश्य। एकाधिक समवर्ती कॉल की अनुमति है।
परकॉल इंस्टेंसिंग + एकाधिक समरूपता - समझ में नहीं आता है। यह अभी भी एकल concurrency की तरह व्यवहार करता है।
पर्सेशन इंस्टेंसिंग + सिंगल कॉन्सुरेंसी - एकाधिक समवर्ती कॉल की अनुमति है, लेकिन प्रत्येक प्रॉक्सी से केवल एक ही कॉल को संसाधित किया जा सकता है। अन्य कॉल कतारबद्ध हैं।
पर्सेशन इंस्टेंसिंग + एकाधिक समवर्ती - एकाधिक समवर्ती कॉल की अनुमति है। प्रत्येक प्रॉक्सी से कई कॉल एक ही समय में एक ही उदाहरण तक पहुंच सकते हैं। आपको सेवा उदाहरण में साझा फ़ील्ड तक पहुंच का मैन्युअल सिंक्रनाइज़ेशन करना होगा।
सिंगल इंस्टेंसिंग + सिंगल कॉन्सुरेंसी - समय पर केवल एक अनुरोध संसाधित किया जा सकता है। अन्य अनुरोध कतारबद्ध हैं (डिफ़ॉल्ट टाइमआउट 30s)।
सिंगल इंस्टेंसिंग + एकाधिक समवर्ती - एकाधिक समवर्ती कॉल की अनुमति है। सभी कॉल एक ही समय में एक ही उदाहरण तक पहुंचते हैं। आपको सेवा उदाहरण में साझा फ़ील्ड तक पहुंच का मैन्युअल सिंक्रनाइज़ेशन करना होगा।
स्रोत
2010-09-07 11:56:44
महान स्पष्टीकरण Ladislav के लिए बहुत बहुत धन्यवाद! – Sandeep
[यह आलेख] (http://blogs.msdn.com/b/rickrain/archive/2009/06/15/wcf-instancing-concurrency-and-throttling-part-1.aspx) डिफ़ॉल्ट कहता है 'PerSession' :( –
@ लद्दीस्लाव श्रीन्का - तो 'पर्सेशन इंस्टेंसिंग + सिंगल कॉन्सुरेंसी' के लिए - 1) इसका मतलब है कि दो अलग-अलग प्रॉक्सी समवर्ती कॉल कर सकते हैं, और सेवा उन्हें एक साथ संसाधित कर सकती है? 2) लेकिन एक प्रॉक्सी से कई कॉल एक समय में संसाधित की जाएंगी? – VoodooChild