c# - WCF सेवा थ्रॉटलिंग




.net soa (2)

डब्लूसीएफ के पास एक डिफ़ॉल्ट पेलोड आकार सीमा है जो संदेशों को एक निश्चित संख्या में बाइट्स को अस्वीकार कर देगा। यह आपकी कॉन्फ़िगरेशन फ़ाइल के बाइंडिंग अनुभाग में निश्चित रूप से कॉन्फ़िगर करने योग्य है। यहां basicHttpBinding साथ एक क्रूड उदाहरण दिया गया है, जो आपको कई विशेषताओं को दिखाता है:

<bindings>
    <basicHttpBinding>
        <binding name="testBinding" maxReceivedMessageSize="2147483647">
            <readerQuotas
              maxDepth="2147483647"
              maxStringContentLength="2147483647"
              maxArrayLength="2147483647"
              maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />
        </binding>
    </basicHttpBinding>

विचार यह है कि आप कई अलग-अलग बाइंडिंग बना सकते हैं जो आप विभिन्न परिदृश्यों के लिए उपयोग कर सकते हैं। यह अच्छा है क्योंकि आप यह सुनिश्चित कर सकते हैं कि आपकी सेवाओं का उपयोग कैसे किया जाता है और केवल उन अंतपॉइंटों के लिए संदेश आकार की सीमा को बढ़ाएं जिनके लिए उन्हें आवश्यकता है।

मान लीजिए कि मैं उस सेवा से काम कर रहा हूं जिसमें बड़ी मात्रा में डेटा भेजना शामिल है।

अगर मैं इसे WCF के साथ लागू करता हूँ, क्या डब्लूसीएफ़ सेवा के लिए प्रत्येक अनुरोध के लिए कितनी मेमोरी लेता है पर आधारित सेवा को दबाना चाहती है? या जब भी मुझे अपनी सेवा में बड़ी संख्या में हिट मिलें, तो क्या मुझे मेमोरी अपवादों का लगातार सामना करना पड़ेगा?

मैं WCF के बाहर इस समस्या से निपटने के लिए काफी उत्सुक हूँ, मैं सेवा विकास के लिए अभी भी थोड़ा नया हूँ ...


बाध्यकारी विशेषताओं और रीडर क्वाट्स का प्रयोग करते हुए ऐन्ड्रू हरे का सुझाव है कि ज्यादातर व्यावहारिक उपयोगों के लिए अनिवार्य रूप से एक असीमित आकार की अनुमति होगी, ध्यान रखें कि आप अन्य मुद्दों जैसे कि समय समाप्ति में चलेंगे यदि आप लंबे समय से चल रहे कमांड स्वीकार करते हैं, चाहे वह सेवा का निर्माण किया गया है (WCF या नहीं)

आपके संदेश का आकार क्या है, इसके बावजूद डब्ल्यूसीएफ सेवा को प्रदर्शन के लिए गड़बड़ करने की आवश्यकता होगी ताकि यह बाढ़ न हो। यदि आप आईआईएस या वास में इसे होस्ट कर रहे हैं, तो आपके पास उन सुविधाओं के लिए अतिरिक्त अंतर्निहित सुविधाएं होंगी जो आपके सेवा को और अधिक "अत्यधिक उपलब्ध" कर देगा। हालांकि, आपको अभी भी संगामिति के मुद्दों पर ध्यान देने की आवश्यकता है निम्न डब्ल्यूसीएफ कॉन्फ़िग कुछ थ्रॉटलिंग मानों को सेट करने का एक उदाहरण प्रदान करता है।

   <system.serviceModel>

    ...

     <behaviors>
       <serviceBehaviors>
         <behavior name="GenericServiceBehavior">
           <serviceTimeouts transactionTimeout="00:09:10"/>
           <serviceThrottling
             maxConcurrentCalls="20"
             maxConcurrentSessions="20"
             maxConcurrentInstances="20"
           />
         </behavior>
       </serviceBehaviors>
     </behaviors>
   </system.serviceModel>




throttling