2010-03-25 3 views
11

Я получаю следующее исключение при попытке передать DTO через службы WCF.WCF Максимальное значение исключения чтения

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 

app.config связывания выглядит как такое поведение службы

<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:

И DTO выглядит следующим образом:

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

Любые помощь будет оценена, поскольку я вытягивая мои волосы с этим.

+1

Вы изменили конфигурацию на клиенте и на сервере? У меня сложилось впечатление, что я должен был сопоставить это изменение с обоими из них раньше. –

+1

Довольно необычно иметь гнездо в глубине. У вас может быть круговая ссылка. Я думаю, нам нужно увидеть больше этого DTO; изменение максимальной вложенности может быть только решением для групповой помощи. – Aaronaught

+0

Я решил проблему, как я объяснил здесь: http://stackoverflow.com/questions/5537794/error-while-deserializing-the-object-in-wcf – Adi

ответ

21

Там есть параметр, называемый maxDepth на <readerQuotas>, которые вы должны быть в состоянии установить более высокое значение, чем 32 (по умолчанию). Вы, очевидно, уже установили это на клиенте (до maxDepth = 200), но вам также нужно сделать это на стороне сервера - иначе меньшее из двух значений (между клиентом и сервером) будет определять действительное число.

Убедитесь, что на стороне сервера также включает в себя эти строки в конфигурации WsHttpBinding:

<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 \t

5

Вы должны изменить конфигурацию привязки на клиенте и на сервере, чтобы соответствовать ...

Смежные вопросы