2010-01-25 7 views
7

मैं आईआईएस का उपयोग करने के बजाय अपनी डब्ल्यूसीएफ सेवा को स्वयं-होस्ट करने की सोच रहा हूं। मेरे लिए एक बड़ा सवाल यह है कि क्या मुझे आईआईएस के रूप में कई सर्विसहोस्ट को चालू करने की आवश्यकता है या एक पर्याप्त होगा।कई सर्विसहोस्ट के लिए क्या फायदे हैं? क्या एक सर्विसहोस्ट एक एंडपॉइंट पर कई एक साथ कनेक्शन का समर्थन करता है?

क्या बहु सेवा सेवा अलगाव के लिए सुरक्षा कारणों को छोड़कर कोई लाभ देती है?

क्या एक सर्विसहोस्ट एक साथ एक एंडपॉइंट पर एकाधिक कनेक्शन प्रदान कर सकता है?

उत्तर

11

कोई लाभ या पसंद नहीं है, वास्तव में - एक ServiceHost (उस वर्ग का उदाहरण) बिल्कुल एक सेवा होस्ट कर सकता है, और प्रत्येक सेवा के लिए, आपको एक अलग सेवा होस्ट की आवश्यकता होती है। यह 1: 1 मैपिंग है - हमेशा, कोई विकल्प नहीं।

लेकिन निश्चित रूप से, आपकी विंडोज एनटी सेवा या कंसोल ऐप में एक ही समय में कई ServiceHost ऑब्जेक्ट सक्रिय हो सकते हैं। यह उपयोगी हो सकता है यदि आपके पास सेवाओं का एक समूह है जो तार्किक रूप से एक साथ हैं और वास्तव में एक दूसरे के बिना अस्तित्व में नहीं हो सकते हैं - जहां यह समझ में नहीं आता है कि उनमें से एक शुरू हो गया है और कोई दूसरा शुरू नहीं हुआ है।

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


सेट करने के लिए और नियंत्रण, आप कितने समवर्ती कॉल और का अनुरोध करता है, तो आप सर्वर साइड पर ServiceThrottling व्यवहार को देखने के लिए की आवश्यकता होगी।

<behaviors> 
    <serviceBehaviors> 
     <behavior name="serviceThrottled"> 
      <serviceThrottling 
       maxConcurrentCalls="16" 
       maxConcurrentInstances="26" 
       maxConcurrentSessions="10"/> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

और आप अपनी सेवा घोषणा में संदर्भित करने के लिए है कि सेवा व्यवहार विन्यास ज़ाहिर है, की जरूरत है:

<service name="YourService" behaviorConfiguration="serviceThrottled"> 
    ..... 
</service> 

इन मूलभूत मूल्यों कर रहे हैं। स्पष्टीकरण इस प्रकार है (दान Rigsby के ब्लॉग पोस्ट से लिया, छोटा) कर रहे हैं:

  • MaxConcurrentCalls (डिफ़ॉल्ट = 16) [प्रति संदेश] संदेशों की अधिकतम संख्या है कि सक्रिय रूप से संसाधित किया जा सकता।

  • मैक्सकॉनकंटेंट इंस्टेंस (डिफ़ॉल्ट = 26) इंस्टेंस कॉन्टेक्स्ट ऑब्जेक्ट्स की अधिकतम संख्या एक सेवा में निष्पादित हो सकती है जो एक समय में निष्पादित हो सकती है। प्रति सत्र सेवा के लिए, यह प्रति-कॉल सेवा के लिए अधिकतम सत्रों के बराबर है, यह समवर्ती कॉल की अधिकतम संख्या है, और सिंगलेट के लिए, यह व्यर्थ है।

  • मैक्सकॉनकंटेंट सत्र (डिफ़ॉल्ट = 10) [प्रति-चैनल] एक समय में सेवा स्वीकार करने वाले सत्रों की अधिकतम संख्या। केवल सत्र-आधारित बाइंडिंग (wsHttp या netTcp)

साथ खेलने में आता है निश्चित रूप से भी विषय पर Dan Rigsby's excellent blog post की जाँच करें।

+0

नहीं, स्थिति में मुझे दिलचस्पी है जब मेरे पास एक एंडपॉइंट के साथ एक लॉजिकल सेवा है, लेकिन मुझे एकाधिक क्लाइंट्स (हालांकि, एक प्रकार के एंडपॉइंट का उपयोग करके) से सेवा के लिए एक साथ कई कनेक्शन की आवश्यकता है। – flashnik

+0

@flashnik: यह निश्चित रूप से कोई समस्या नहीं है।डिफ़ॉल्ट रूप से, सेवा पर 10-16 समवर्ती कॉल संभव हैं, इससे कोई फर्क नहीं पड़ता कि वे –

+0

पर किस अंतराल पर आते हैं, क्या आप कृपया बता सकते हैं कि मैं इस राशि को कैसे बदल सकता हूं? – flashnik

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