当服务操作数超过75时,读取XML数据错误时已超出最大名称字符计数限额(16384)

时间:2013-09-25 07:27:19

标签: wcf

我们在项目中使用WCF中的NetTCPbinding。最近,随着服务运营数量增加到75以上,我们在启动服务时遇到了这个错误。

  

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

正如此错误消息中所述,我们增加了MaxNameTableCharCount属性的配额,但它没有解决我们的问题。

我们的团队也遵循以下链接中给出的解决方案。但是,这些都不适合我们。

WCF - The maximum nametable character count quota (16384) has been exceeded while reading XML data

http://geekswithblogs.net/claraoscura/archive/2007/08/20/114806.aspx

http://mnairooz.blogspot.in/2010/06/maximum-nametable-character-count-quota.html

请在下面找到我们在服务器端的app.config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="Test.ServiceLibraryHost.ServiceBehavior"
               name="Test.ServiceLibraryHost.TestService">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="myNetTcpBinding" contract="Test.ServiceLibraryHost.ITestService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8529/TestService"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Test.ServiceLibraryHost.ServiceBehavior">
          <serviceMetadata />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="myNetTcpBinding">
          <readerQuotas maxDepth="32" maxStringContentLength="21745878" maxArrayLength="21745878"
              maxBytesPerRead="21745878" maxNameTableCharCount="21745878" />
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

在这种情况下,任何帮助都将受到高度赞赏。如果您需要更多信息,请告诉我们。谢谢。

2 个答案:

答案 0 :(得分:3)

终于解决了问题!!!!

我们咨询了技术架构师。在尝试了很多方法之后,我们发现如果我们安装.Net framework 4.5版本(我们的应用程序使用.Net framework 4.0),这个问题就会自动解决,而不会对服务器端的配置文件进行任何更改。

如果在安装.Net framework 4.5后仍有人遇到此问题,他/她可以增加阅读器配额标记中的“maxNameTableCharCount”值。

在新的框架版本中可能会有一些解决方法。

我希望在没有其他解决方案可行的情况下帮助某人。

如果您需要任何进一步的信息,请告诉我。

感谢。

答案 1 :(得分:1)

您必须在客户端和服务器上使用相同的readerQuotas:

 <readerQuotas maxDepth="32" maxStringContentLength="21745878" maxArrayLength="21745878"
          maxBytesPerRead="21745878" maxNameTableCharCount="21745878" />

检查双方是否相同,我猜你没有更改客户端的配额。