日期:2014-05-17  浏览次数:20585 次

wcf问题:超出最大名称表字符计数配额 (16384)。
下载“http://127.0.0.1:9001/Service1/mex”时出错。
请求因 HTTP 状态 400 失败: Bad Request。
元数据包含无法解析的引用:“http://127.0.0.1:9001/Service1/mex”。
XML 文档(1, 105859)中有错误。
读取 XML 数据时,超出最大名称表字符计数配额 (16384)。名称表是用于存储在处理 XML 时所遇到的字符串的数据结构 - 具有非重复元素、属性名称和属性值的长 XML 文档可能会触发此配额。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxNameTableCharCount 属性,可增加此配额。 第 1 行,位置为 105859。

一个contrat有很多的OperationContract的时候,客户端添加服务引用的时候就会出现这个问题。
我发现服务器端MaxNameTableCharCount 这个属性,客户端的bind节点中有的,但是bind节点是添加服务之后自动生成的啊,我服务无法添加,也就无法生成这个属性。就算我服务器端先少几个OperationContract,先添加成功,然后将MaxNameTableCharCount="16384"改成MaxNameTableCharCount="65535",可是当我服务器多加几个OperationContract的时候,更新也不成功。我现在解决办法是再写一个Contract类。可是貌似这样不是办法。要怎么办呢?

以下是服务器端的app.config

  <services>
  <service name="SQS.Demo.Server.Ticket" behaviorConfiguration="TicketBehavior">
  <endpoint address="TicketService" binding="netTcpBinding" bindingConfiguration="TicketBindingConfiguration" contract="SQS.Demo.Contract.ITicket" />
  <endpoint address="mex" contract="IMetadataExchange" binding="mexTcpBinding" />
  <host>
  <baseAddresses>
  <add baseAddress="net.tcp://127.0.0.1:9001"/>
  </baseAddresses>
  </host> 
  </service>

------解决方案--------------------
哥们, 不知你解决了没有?没有的话请看http://hi.baidu.com/mark58/blog/item/d0fd517b7280eff80ad1879a.html
试试 ,OK了记得给分哦