已超出最大名称字符数量限额(16384)

时间:2012-01-23 16:44:04

标签: wcf web-services binding web-config

当我尝试与我的WCF服务通信时,我收到以下错误:

  

已超出最大名称表字符数限额(16384)   在阅读XML数据时。名称表是用于的数据结构   存储XML处理期间遇到的字符串 - 长XML文档   具有非重复元素名称,属性名称和属性值   可能会触发此配额。可以通过更改此配额来增加此配额   XmlDictionaryReaderQuotas对象上的MaxNameTableCharCount属性   在创建XML阅读器时使用。第4行,第283位。

我尝试通过添加readerQuotas as suggested here来增加maxNameTableCharCount,但我仍然遇到同样的错误。

...
<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 个答案:

答案 0 :(得分:1)

确保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>