2009-05-23 17 views
29

में सेवा बहुत व्यस्त त्रुटि मैं अपने .NET WCF सेवा में निम्नलिखित अपवाद प्राप्त करता हूं। "http://MyServer/TestWCF/MyService.svc पर स्थित HTTP सेवा बहुत व्यस्त है।"डब्ल्यूसीएफ

क्या मुझे यहां कुछ याद आ रही है?

मूल http बाध्यकारी का उपयोग कर रहा हूं और डब्ल्यूसीएफ थ्रॉटलिंग सक्षम कर दिया है।

<basicHttpBinding> 
     <binding name="BasicHttpBinding_MyService" maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" textEncoding="utf-16" sendTimeout="00:01:00" > 
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="163840000" 
         maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" /> 
     </binding> 

। । । ।

<behavior name="MyWCFServices.MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceThrottling 
        maxConcurrentCalls="16" 
        maxConcurrentInstances="2147483647" 
        maxConcurrentSessions="10"/> 
     </behavior> 

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

उत्तर

10

आप निश्चित रूप से maxConcurrentSessions और maxConcurrentCalls को अपनी सेवा थ्रॉटलिंग व्यवहार में 30 या उससे अधिक के मानक मानों में बढ़ाने की कोशिश कर सकते हैं और देख सकते हैं कि इससे त्रुटि दूर हो जाती है या नहीं। बहुत व्यस्त सर्वर यह इंगित करता है कि आपकी सेवा थ्रॉटलिंग व्यवहार द्वारा अनुमत क्षेत्र से अधिक अनुरोध आया है, और उन्हें त्याग दिया गया है क्योंकि दिए गए समय अवधि के भीतर उनकी सेवा के लिए कोई सेवा उदाहरण उपलब्ध नहीं हुआ है।

+0

आपके उत्तर के लिए धन्यवाद ... क्या मुझे क्लाइंट और सर्वर की ओर web.configs दोनों में थ्रॉटलिंग सक्षम करने की आवश्यकता है? –

+0

भी, मैं जानना चाहता हूं कि maxConcurrentInstances पैरामीटर के लिए अनुशंसित मान क्या है? –

+0

हाय स्टीव - क्लाइंट पर इसे संभालने की कोई ज़रूरत नहीं है - यह केवल एक सर्वर पक्ष है। MaxConcurrentInstances के लिए: अपने आप से पूछें कि आप उन ग्राहकों से कितने अनुरोध करते हैं जिन्हें आप एक साथ संभालना चाहते हैं। 5? 10? अनुरोध को संभालने में कितना समय लगता है? एक अच्छा प्रारंभिक बिंदु 30 हो सकता है और देख सकता है कि क्या यह ए) आपकी सेवा को अधिक उत्तरदायी होने में सहायता करता है, और बी) आपके सर्वर को अधिभारित नहीं करता है। यह देखने के बाद जरूरी है कि यह कैसा व्यवहार करता है। –

2

यह केवल अधिकतम कॉन्स्ट्रंटेंट सत्र नहीं है, यह सत्र कितना समय तक चलता है।

यदि ग्राहक कनेक्शन बंद नहीं करता है, तो यह समय-समय पर खुला रहेगा। फिर आप सर्वर पर बहुत कम गतिविधि के साथ maxConcurrent सत्र सीमा को हिट कर सकते हैं।

+2

असल में, ग्राहक को उपयोग कथन का उपयोग नहीं करना चाहिए। साफ-सफाई स्पष्ट रूप से संभाला जाना चाहिए। अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/aa355056.aspx देखें। –

+0

@ एंथनी, टिप्पणी के लिए धन्यवाद, मैंने उपयोग भाग को हटा दिया है। यह 200 9 से था, जब मैं छोटा था और किसी भी बेहतर नहीं जानता :) –

+1

@AntSwift: बहुत से लोग इसे जानते हैं लेकिन ऐसा नहीं करते हैं। – abatishchev

1

इस अपवाद का एकमात्र स्रोत जो मुझे पता है कि यदि आप सत्र का उपयोग कर रहे हैं, और आप MaxPendingChannels थ्रॉटल को हिट करने का प्रबंधन करते हैं। इसका डिफ़ॉल्ट 4 की तरह बहुत कम है। आप इसे उच्च (उदाहरण के लिए 128) सेट करने का प्रयास कर सकते हैं, या यदि आप बस रेपो करना चाहते हैं, तो इसे 1 पर सेट करें और आपको इसे लोड परीक्षण के तहत देखना चाहिए।

सत्र के बारे में अधिक जानकारी के लिए यहाँ देखें: http://msdn.microsoft.com/en-us/library/ms733795.aspx

9

मेरा जवाब होगा, तो देखें कि एप्लिकेशन पूल अप और अच्छी तरह से है?

मैंने यह त्रुटि तब देखी है जब ऐप पूल की मृत्यु हो गई है, जो अपवादों को फेंकने वाले अपवादों के कारण मर गया है।

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

+0

इसे पहले देखें। यह ठीक दिख सकता है, लेकिन यदि आप प्रबंधक से ऐप पूल रोकते हैं, तो आप इसे फिर से शुरू करने में असमर्थ होंगे। सबकुछ फिर से प्राप्त करने के लिए, कमांड लाइन से "नेट स्टॉप w3svc" फिर "नेट स्टार्ट w3svc" का उपयोग करें। – tofutim

+0

मेरी सैनिटी बचाने के लिए धन्यवाद जो सिर्फ दरवाजे से बाहर निकल रहा था। – eouw0o83hf

+0

यह मेरे लिए यह था दोस्तों! ऐप पूल और बिंगो रीसाइक्लिंग – JeremyS

4

यदि आप सेवा अपने खाते (पहचान) के तहत चल रही हैं, तो यह संभव है कि आपने हाल ही में अपना पासवर्ड बदल दिया है - आपको इसे उन्नत सेटिंग्स में अपने आईआईएस एप्लिकेशन पूल के लिए रीसेट करने की आवश्यकता होगी। पहचान संवाद बॉक्स।

+1

+1 यह सिर्फ एक उत्पादन वातावरण में हुआ। सर्वर को व्यस्त करने वाला संकेत देने वाला बहुत भ्रामक त्रुटि संदेश। बू। इस पर ध्यान दिलाने के लिए धन्यवाद! –

1

मैं बस इस त्रुटि में भाग गया, और यह एक साधारण विन्यास समस्या के लिए उबला हुआ। मेरे पास एक ही पोर्ट और एक ही इंटरफ़ेस (नकली सेवा) पर एक सेवा थी। मैंने "मूल" सेवा को चलाने के लिए उपयुक्त कमांड लाइन स्विच के साथ सेवा चलाई। त्रुटि चली गई।

0

मेरा समाधान होगा, App.Config फ़ाइल देखें, चाहे सेवा टैग इस विशेष सेवा के लिए है या नहीं।

जैसे:

<service name="MyServices.ServiceName"> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TestBinding" contract="MyServices.ServiceName"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/MyServices/ServiceName/" /> 
      </baseAddresses> 
     </host> 
</service> 
2

आप भीतरी अपवाद भी जाँच सुनिश्चित करें; हमारे तैनाती के दौरान, हम एक WCF वेब सेवा के अनुप्रयोग पूल अक्षम करें, और ग्राहकों को उस समय के दौरान यह त्रुटि मिल रही शुरू:

System.ServiceModel.ServerTooBusyException: The HTTP service located at https://ourserver.x.com/path/service.svc is too busy. ---> System.Net.WebException: The remote server returned an error: (503) Server Unavailable.

इस मामले HTTP त्रुटि 503 किया जा रहा है में

तो (? गलत) के रूप में "सर्वर में व्याख्या की बहुत व्यस्त"।