2009-10-09 17 views
5

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

मैं ऊपर scenerio से संबंधित दो संदेह:

  1. कैसे एक WCF सेवा से अनेक ग्राहक के अनुरोध को संभालती है?
  2. क्या प्रक्रिया को कुशल बनाने के लिए कोई डब्ल्यूसीएफ कॉन्फ़िगरेशन है?

धन्यवाद!

उत्तर

11

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

आप अपने सर्वर पर serviceThrottling व्यवहार का उपयोग कर उन समवर्ती सक्रिय सेवा वर्ग उदाहरणों की अधिकतम संख्या को ट्विक कर सकते हैं।

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ThrottledServiceBehavior"> 
      <serviceThrottling 
       maxConcurrentCalls="25" 
       maxConcurrentSessions="25" 
       maxConcurrentInstances="25"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

केनी वुल्फ के blog post here में सेवा थ्रॉटलिंग व्यवहार के विकल्पों और उसके मूलभूत मूल्यों की एक बहुत अच्छी व्याख्या नहीं है।

इसके अलावा, InstanceContextMode और ConcurrencyMode आपकी सेवा वर्ग पर (जो सेवा अनुबंध को लागू करता है) की स्थापना कैसे आपकी सेवा संगामिति और अधिक अनुरोध संभाल लेंगे पर एक मजबूत प्रभाव है।

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall, 
       ConcurrencyMode=ConcurrencyMode.Single)] 
class YourServiceClass : IYourService 
{ 
    ..... 
} 

InstanceContextModePerCall (प्रत्येक बुला अनुरोध एक नया और अलग उदाहरण हो जाता है) और फिर ConcurrencyModeSingle हो सकता है (जो सबसे आसान विकसित करना है) होना चाहिए।

InstanceContextMode भी PerSession हो सकता है अगर आप एक सत्र-आधारित दृष्टिकोण (बहुत आम नहीं), या जरूरत Single (आपकी सेवा वर्ग एक सिंगलटन होगा - अत्यधिक हतोत्साहित यह उपयोग करने के लिए, जब तक आप पूरी तरह से, सकारात्मक करने के लिए है और सभी के बारे में पता इसके साथ quirks और समस्याएं!)।

ConcurrencyMode भी Reentrant या Multiple (केवल द्वैध अनुबंध और बाइंडिंग के लिए प्रासंगिक) हो सकता है (बहु-क्रम सिंगलटन सेवा वर्ग - अत्यधिक जोखिम भरा और विकसित करने के लिए मुश्किल)।

मार्क

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