превышена максимальная квота подсчета именных символов (16384) - PullRequest
0 голосов
/ 23 января 2012

Когда я пытаюсь связаться с моей службой WCF, я получаю следующую ошибку:

Превышена максимальная квота числа именных символов (16384) при чтении данных XML. Nametable - это структура данных, используемая для хранить строки, встречающиеся при обработке XML - длинные XML-документы с неповторяющимися именами элементов, именами атрибутов и значениями атрибутов может вызвать эту квоту. Эта квота может быть увеличена путем изменения Свойство MaxNameTableCharCount для объекта XmlDictionaryReaderQuotas используется при создании читателя XML. Строка 4, позиция 283.

Я попытался увеличить maxNameTableCharCount, добавив readerQuotas, как предложено здесь , но я все еще получаю ту же ошибку.

...
<bindings>
    <basicHttpBinding>
        <binding name="oseo_basicHTTP_binding">
            <readerQuotas maxDepth ="2147483647"
                maxStringContentLength="2147483647"
                maxArrayLength="2147483647"
                maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
        </binding>
    </basicHttpBinding>
</bindings>
<services>
    <service name="oseo">
        <host>
            <baseAddresses>
                <add baseAddress="http://localhost:56565/" />
            </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="oseo_basicHTTP_binding" contract="Ioseo" />
        <endpoint
            address="mex"
            binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
</services>
...

РЕДАКТИРОВАТЬ # 1: Некоторая справочная информация:

Этот web.config находится на стороне службы. Я использую SoapUI в качестве клиента, а не клиента .NET.

1 Ответ

1 голос
/ 24 января 2012

Убедитесь, что у вас есть полное имя класса обслуживания в атрибуте name элемента <service>.Ваш класс контракта находится в пространстве имен DataContract (DataContract.Ioseo).Если класс обслуживания также находится в том же пространстве имен, это то, что вам нужно:

<services>
  <service name="DataContract.OSEOService">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:51515/" />
      </baseAddresses>
    </host>
    <endpoint address=""
              binding="basicHttpBinding"
              bindingConfiguration="oseo_basicHTTP_binding"
              contract="DataContract.Ioseo" />
    <endpoint
        address="mex"
        binding="mexHttpBinding"
        contract="IMetadataExchange" />
</service>
...