1

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

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

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

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

WCF - 读取 XML 数据时已超出最大可命名字符计数配额 (16384)

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>

在这种情况下,任何帮助将不胜感激。如果您需要更多信息,请告诉我。谢谢你。

4

2 回答 2

3

终于把问题解决了!!!!

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

如果有人在安装 .Net framework 4.5 后仍然面临这个问题,他/她可以增加阅读器配额标签中的“maxNameTableCharCount”值。

在新的框架版本中可能会对此进行一些修复。

当没有其他可用的解决方案有效时,我希望对某人有所帮助。

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

谢谢。

于 2013-09-25T12:40:45.190 回答
1

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

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

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

于 2013-09-25T09:10:51.263 回答