2011-06-08 12 views
6

हमारे पास एक डब्ल्यूसीएफ सेवा है जो 100 से अधिक ग्राहक साइटें कॉल करती हैं। आज हम हो रहीडब्ल्यूसीएफ उत्पादन में त्रुटि "बहुत सक्रिय सुरक्षा वार्ता" त्रुटि

Exception: Server 'http://[url]/services/[service].svc/ws' sent back a  
fault indicating it is too busy to process the request. Please retry later. Please see the 
inner exception for fault details. 
System.ServiceModel.FaultException: There are too many active security negotiations or 
secure conversations at the service. Please retry later. 

केवल जानकारी मैं मिल सकता है कि मैं maxPendingSessions बड़ा बनाने की जरूरत है शुरू कर दिया। लेकिन इसके लिए एंडपॉइंट को कस्टम बाइंडिंग में बदलने की आवश्यकता होगी, जो मुश्किल होगा क्योंकि मुझे इसे अपनी सभी क्लाइंट साइटों पर धक्का देना होगा।

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

या क्या मैं इसे संभालने का कोई और तरीका है?

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,  Microsoft.Practices.EnterpriseLibrary.Data"/> 
    </configSections> 
    <connectionStrings> 
    </connectionStrings> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0"/> 
     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" switchValue="Error" propagateActivity="true"> 
     <listeners> 
      <add name="xml" /> 
     </listeners> 
      </source> 
    </sources> 
    <sharedListeners> 
     <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:\logs\log.txt" /> 
    </sharedListeners> 
    </system.diagnostics> 

    <system.serviceModel> 
<diagnostics performanceCounters="All" /> 
     <services> 
     <service name="WCFServiceLibrary.WCFService"> 
    <endpoint address="ws" binding="wsHttpBinding"  bindingConfiguration="WSHttpBinding_IWCFService" 
     name="WSHttpEndpoint_IWCFService" contract="WCFServiceLibrary.IWCFService" /> 
    <endpoint address="basic" binding="basicHttpBinding" 
       name="BasicHttpEndpoint_IWCFService"    contract="WCFServiceLibrary.IWCFService" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
    </services> 
    <bindings> 
      <wsHttpBinding> 
      <binding name="WSHttpBinding_IWCFService" 
      maxBufferPoolSize="524288" maxReceivedMessageSize="1048576"> 
     <readerQuotas maxDepth="32" maxStringContentLength="65536"  maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="Message"> 
      <message clientCredentialType="Certificate"  negotiateServiceCredential="true" 
       algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
     <behaviors> 
      <serviceBehaviors> 
     <behavior> 
      <serviceCredentials> 
      <serviceCertificate findValue="CN=[url]" storeLocation="LocalMachine"  storeName="TrustedPeople" /> 
      <clientCertificate> 
       <authentication revocationMode="NoCheck"  certificateValidationMode="PeerTrust" /> 
       </clientCertificate> 
      </serviceCredentials> 
      <serviceThrottling maxConcurrentCalls ="1001" maxConcurrentSessions="1001"  maxConcurrentInstances="1000" /> 
        <serviceMetadata httpGetEnabled="true"/> 
        <serviceDebug  includeExceptionDetailInFaults="false"/> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 
</configuration> 

संपादित
हम एक iisreset की कोशिश की और यहां तक ​​कि सर्वर को पुनः आरंभ और यह अब भी वही त्रुटि फेंक रहा है:

संपादित यहाँ मेरी config है।

+0

लगता है जैसे आपके पास किसी प्रकार की सत्र बाधा के साथ सिंगलटन सेवा है। यदि आप अपने प्रश्न में सेवा अनुबंध सेटअप और कॉन्फ़िगरेशन पर जानकारी डालते हैं तो इससे मदद मिलेगी। –

+0

@ सिक्सटो हां यह है। यह आईआईएस में होस्ट किया गया है। मैंने अपनी कॉन्फ़िगरेशन जोड़ दी है। – Marcus

+0

ऐप पूल रीसाइक्लिंग आपके रीसेट प्रश्न का उत्तर देगा, लेकिन आपकी समस्या का समाधान नहीं करेगा। आप अपने ऐप की तुलना में अन्य कारकों के कारण समस्या का कारण बन सकते हैं, क्योंकि आप प्रमाणपत्र का उपयोग कर रहे हैं। आपका सीए सेटअप कैसा है? –

उत्तर

3

http://social.msdn.microsoft.com/Forums/en-GB/wcf/thread/a8f82f1d-e824-474e-84ef-b5e9ba7eca18

समस्या ग्राहक पैदा कर रही है लेकिन इसे प्रयोग नहीं (इस पर कोई भी तरीका बुला नहीं)।

http://litemedia.info/there-are-too-many-active-security-negotiations-or-secure-conversations-at-the-service

मैं 4 दिन बिताए इस साकार करने के लिए यह तय नहीं है .NET 4.0 में जांच कर रही।

रेप्रो आसान है:

ChannelFactory<IFoo> foo = new ChannelFactory<IFoo>("binding"); 
foo.Open(); 
foo.Close(); 

128 के बाद कॉल आप त्रुटि मिलती है।

मुझे नहीं पता कि यह क्यों तय नहीं किया गया है लेकिन समाधान प्रॉक्सी बनाना है जब आप सुनिश्चित हैं कि आपको इसे कॉल करने की आवश्यकता है। बढ़ते अधिकतम भुगतान नॉय वास्तव में उपयोगी है क्योंकि आप अभी भी threashold हिट कर सकते हैं।

+0

"प्रॉक्सी जब आप सुनिश्चित हैं कि आपको इसे कॉल करने की आवश्यकता है" कैसे बनाएं? मुझे एक ही समस्या है और आपकी पोस्ट एक ही समय में वादा कर रही है लेकिन निराशाजनक है। – Sam

0

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

+0

एक समय में ConcurrencyMode = एकल सीमा मुझे एक कॉल पर सेट नहीं करेगा? यह अच्छी तरह से स्केल नहीं करेगा, और मैं नहीं चाहता कि मेरे ग्राहकों को दूसरों के लिए इंतजार करना पड़े। – Marcus

+0

आईआईएस के साथ डब्ल्यूसीएफ और आपके प्रश्न में आपके पास कॉन्फ़िगरेशन प्रति डब्लूसीएफ सत्र (जो एएसपी.नेट सत्र से पूरी तरह से ** स्वतंत्र ** है) के एक सेवा उदाहरण को बढ़ाएगा। यह [एमएसडीएन लेख] (http://msdn.microsoft.com/en-us/library/ms733040.aspx) डब्ल्यूसीएफ सत्रों का एक विस्तृत अवलोकन है। या तो प्रति-कॉल या प्रति-सत्र InstanceContextMode सेटिंग्स बहुत स्केलेबल हैं। ConcurrencyMode नियंत्रण क्या है कि प्रत्येक सेवा उदाहरण को बहु-थ्रेडेड होने की अनुमति है या नहीं। –

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