WCF - Win App «Превышена максимальная квота на длину содержимого строки (8192) при чтении данных XML». - PullRequest
8 голосов
/ 05 февраля 2011

У меня возникли проблемы при внедрении веб-службы через WCF.Когда я передаю значение в метод WCF из клиентского приложения в виде строки (xml), получаю ошибку

При попытке десериализации сообщения форматировщик выдал исключение: при попытке десериализации параметра произошла ошибкаhttp://tempuri.org/:XmlEntity.

Сообщение InnerException было

'Произошла ошибка при десериализации объекта типа System.String.Максимальная квота длины строки содержимого (8192) была превышена при чтении данных XML.Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML.Строка 249, позиция 19. '.

Я попытался изменить значение maxStringContentLength в файле клиента web.configuration, но ошибка остается той же.Пожалуйста, попробуйте найти решение как можно скорее.

Ответы [ 4 ]

12 голосов
/ 05 февраля 2011

Ashish, Darin означает, что вы должны были создать basicHttpBinding для переопределения и увеличить значение maxStringContentLength до 2147483647. Можете ли вы подтвердить, настроили ли вы конечную точку для использования того же binidng с атрибутом bindingConfiguration.Например, вы создали привязку, подобную этой,

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

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

<endpoint  
     address="....."
     binding="basicHttpBinding" bindingConfiguration="HandleLargeMessage" 
     contract="xxx" />

Можете ли вы подтвердить, что уже сделали это?очень вероятно, что здесь это не так.

Если вы уже выполнили это и хотели бы подтвердить, используется ли он, отследите трассировки WCF для служебного и клиентского приложения на подробном уровне и проверьте действияв Construct Host в сервисе и в Construct канал в клиентском приложении.

7 голосов
/ 05 февраля 2011

Попробуйте увеличить это значение как на сервере, так и на клиенте:

<binding 
    name="myBinding"
    maxReceivedMessageSize="2147483647">
        <readerQuotas 
            maxDepth="2147483647"
            maxStringContentLength="2147483647"
            maxArrayLength="2147483647"
            maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
</binding>
1 голос
/ 29 января 2012

Как всегда с WCF, здесь есть программная альтернатива для увеличения MaxStringContentLength.

BasicHttpBinding binding = new BasicHttpBinding();
binding.ReaderQuotas.MaxStringContentLength = 2147483647

host.AddServiceEndpoint(contract, binding, address);
0 голосов
/ 23 февраля 2011

Размер maxStringContentLength должен быть увеличен.Но не стоит слепо увеличивать все значения до этого числа.Например, maxDepth относится к уровням вложенности в XML, и лучше оставить для него значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...