Максимальная квота длины содержимого строки (8192) - PullRequest
9 голосов
/ 02 августа 2011

Ошибка в десериализации тела ответного сообщения для операции «CreateTransactionEntity». Максимальная квота длины строки содержимого (8192) была превышена при чтении данных XML. Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML.

Эй, я продолжаю получать эту ошибку, даже если у меня в моем файле web.config есть узел readerQuota с большим сроком службы ...

<system.serviceModel>
<bindings>
  <netTcpBinding>
    <binding name="BindingTcp"  maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                  maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </netTcpBinding>

После просмотра интернета на эту тему, я не могу найти приличного ответа. Если у вас есть какие-либо советы, я был бы очень признателен.

Ответы [ 2 ]

15 голосов
/ 03 августа 2011

Чтобы обеспечить выбор значений, указанных для привязки, необходимо присвоить имя привязки из элемента <binding> атрибуту bindingConfiguration элемента <endpoint>.Если вы этого не сделаете, WCF будет использовать значения по умолчанию для указанной привязки.

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="BindingTcp"  maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      </binding>
    </netTcpBinding>

В приведенном выше примере вы назначили «BindingTCP» в качестве имени в элементе <binding>.Итак, в вашей конечной точке сделайте следующее:

<endpoint address="net.tcp://some.website.url/yourserivce" binding="netTcpBinding" bindingConfiguration="BindingTCP" contract="IYourContract" />

В зависимости от того, где находится ошибка (на клиенте или на сервере), определите, какой файл конфигурации необходимо изменить.Если ошибка происходит на обоих концах, измените оба файла конфигурации.

1 голос
/ 03 августа 2011

Вы должны проверить ваше клиентское приложение, чтобы узнать, использует ли оно конфигурацию привязки по умолчанию.Более быстрый способ подтвердить это - захватить трассировки WCF на подробном уровне и проверить события активности Construct ChannelFactory.

HTH, Амит Бхатия

...