2011-01-15 16 views
5

हाय मैं WCF के साथ एक शोकहारा सेवा बनाने की प्रक्रिया में हूँ, सेवा किसी भी समय पर कम से कम 500 लोगों द्वारा खपत होने की संभावना है। इससे निपटने के लिए मुझे किन सेटिंग्स को सेट करने की आवश्यकता होगी। कृपया मुझे कोई अंक और सुझाव दें, धन्यवाद।एक WCF शोकहारा सेवा बनाना, संगामिति मुद्दों

यहां मेरे पास अब तक का नमूना है;

[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 

और यह एक विधि का एक उदाहरण है;

public UsersAPI getUserInfo(string UserID) 
    { 
     UsersAPI users = new UsersAPI(int.Parse(UserID)); 

     return users; 
    } 



    [OperationContract] 
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "User/{UserID}")] 
    [WebHelp(Comment = "This returns a users info.")] 
    UsersAPI getUserInfo(string UserID); 

उत्तर

7

सबसे अच्छा तरीका उपयोग करने के लिए होगा:

  • InstanceContextMode.PerCall
  • ConcurrencyMode.Single

यह प्रत्येक फोन करने वाले के लिए सेवा वर्ग का एक नया उदाहरण पैदा करेगा और से बचाता है अपने कोड के बहु-थ्रेडेड, समवर्ती पहुंच के बारे में चिंता करने के लिए, क्योंकि प्रत्येक अनुरोध को अपना स्वयं का सेवा वर्ग उदाहरण मिलता है (जो स्वयं में एकल-थ्रेडेड होता है - यह एक समय में केवल एक ही कॉलर परोसता है)।

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

ServiceThrottling सेवा व्यवहार का उपयोग करके, आप बहुत आसानी से नियंत्रित कर सकते हैं कि कितने समवर्ती कॉलर्स की अनुमति है - यह आपकी मशीन के प्रकार और आकार पर निर्भर करता है।

<serviceBehaviors> 
    <behavior name="Throttling"> 
    <serviceThrottling 
      maxConcurrentCalls="16" 
      maxConcurrentInstances="16" 
      maxConcurrentSessions="10" /> 
    </behavior> 
</serviceBehaviors> 

उन WCF 3.5 के लिए डिफ़ॉल्ट हैं - maxConcurrentCalls सेटिंग्स को परिभाषित करता है कि कितने कॉल करने के लिए एक साथ संभाला जा सकता है। अधिक जानकारी के लिए बाहर MSDN docs on Service throttling

चेक।

+0

प्रतिक्रिया देने के लिए हाय धन्यवाद, क्या हम बड़े होने पर भी वही सेटिंग्स लागू करेंगे, और 30000 उपयोगकर्ताओं की तरह कुछ था? – pmillio

+0

+1, अच्छा जवाब। उपर्युक्त सेटिंग्स के साथ आपको अभी भी थ्रेड सुरक्षा के बारे में चिंता करने की ज़रूरत है यदि आप सेवा उदाहरण के बाहर साझा स्थिति तक पहुंचते हैं। साथ ही, यदि आप अपने सेवा उदाहरण में उत्परिवर्तनीय स्थिति संग्रहीत नहीं करते हैं, तो आप सर्वोत्तम प्रदर्शन के लिए 'InstanceContextMode.Single' और' ConcurrencyMode.Multiple' का उपयोग कर सकते हैं। –

+1

@pmillio: आप, (है कि बस डिफ़ॉल्ट है) maxConcurrentCalls की संख्या बढ़ाने की आवश्यकता हो सकती है या आपके कोई अतिरिक्त सर्वर खरीदने की जरूरत हो सकती है - लेकिन वास्तुकला बहुत अच्छी तरह से अनुरूप –

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