2010-03-25 15 views
11

डब्ल्यूसीएफ सेवाओं पर डीटीओ पास करने का प्रयास करते समय मुझे निम्नलिखित अपवाद मिलता है।डब्ल्यूसीएफ अधिकतम पढ़ें गहराई अपवाद

System.Xml.XmlException: The maximum read depth (32) has been exceeded because XML data being read has more levels of nesting than is allowed by the quota. This quota may be increased by changing the MaxDepth property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 5230. 
    at System.Xml.XmlExceptionHelper.ThrowXmlException 

इस

<binding name="WSHttpBinding_IProjectWcfService" closeTimeout="00:10:00" 
     openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" 
     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="524288" maxReceivedMessageSize="10240000" messageEncoding="Text" 
     textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
     <readerQuotas maxDepth="200" maxStringContentLength="8192" maxArrayLength="16384" 
     maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" 
     enabled="false" /> 
     <security mode="Message"> 

     <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""> 
      <extendedProtectionPolicy policyEnforcement="Never" /> 
     </transport> 
     <message clientCredentialType="UserName" negotiateServiceCredential="true" 
      algorithmSuite="Default" establishSecurityContext="true" /> 
     </security> 
    </binding> 

Web.config सेवा व्यवहार की तरह app.config बाध्यकारी दिखता है:

और डीटीओ इस तरह दिखता है:

[Serializable] 
[DataContract(IsReference=true)] 
public class MyDto 
{ 

कोई मेरी सराहना की जाएगी जैसा कि मैं हूं इसके साथ अपने बालों को खींच कर।

+1

आप दोनों क्लाइंट और सर्वर पर विन्यास बदल लिया है:

सुनिश्चित करें कि आपके सर्वर साइड भी अपने wsHttpBinding विन्यास में इन पंक्तियों के नाम शामिल है? मुझे लगता है कि मुझे पहले दोनों में इस बदलाव से मेल खाना पड़ेगा। –

+1

उस गहरे घोंसले के लिए बहुत असामान्य है। आपके पास एक परिपत्र संदर्भ हो सकता है। मुझे लगता है कि हमें उस डीटीओ के अधिक देखने की जरूरत है; अधिकतम घोंसले को बदलना केवल बैंड-सहायता समाधान हो सकता है। – Aaronaught

+0

मैंने अपनी समस्या हल की है जैसा कि मैंने यहां समझाया है: http://stackoverflow.com/questions/5537794/error-while-deserializing-the-object-in-wcf – Adi

उत्तर

21

एक सेटिंग <readerQuotas> पर maxDepth कहा जाता है जो आप 32 की तुलना में अधिक मान पर सेट करने के लिए सक्षम होना चाहिए (नहीं है चूक)। आपने स्पष्ट रूप से इसे पहले से ही क्लाइंट पर सेट किया है (maxDepth = 200), लेकिन आपको इसे सर्वर की तरफ भी करने की ज़रूरत है - अन्यथा, दो मानों (क्लाइंट और सर्वर के बीच) का छोटा उपयोग वास्तविक संख्या को परिभाषित करेगा।

<readerQuotas maxDepth="200" maxStringContentLength="8192" maxArrayLength="16384" 
     maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
+1

मुझे एक ही समस्या थी और मैंने इस समाधान का उपयोग करके इसे हल किया !! धन्यवाद .. –

+0

readerQuotas बाध्यकारी का एक नोड है। इसलिए web.config इस तरह होना चाहिए: \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t +०१२३२९६५५६०६

5

आप दोनों क्लाइंट और सर्वर से मेल करने के लिए बाध्यकारी विन्यास को बदलने के लिए है ...

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