我们在项目中使用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>
在这种情况下,任何帮助都将受到高度赞赏。如果您需要更多信息,请告诉我们。谢谢。
答案 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" />
检查双方是否相同,我猜你没有更改客户端的配额。