WCF – 读取XML数据时已超出最大名称字符数量限额(16384)

我有一个使用wsHttpBinding的WCF服务。 服务器配置如下:

           

在客户端,我包括WCF服务的服务参考。 如果我的function有限,在我的IService中说90操作合同但是如果再添加一个OperationContract而不是我无法更新服务引用,我也能添加该服务引用。 在本文中提到通过更改这些配置文件(即devenv.exe.config,WcfTestClient.exe.config和SvcUtil.exe.config)它可以工作,但即使包括那些配置文件中的那些绑定仍然会弹出错误说

下载’ http://10.0.3.112/MyService/Service1.svc/mex ‘时出错。 请求失败,HTTP状态为400:错误请求。 元数据包含无法解析的引用:’ http : //10.0.3.112/MyService/Service1.svc/mex ‘。 XML文档中存在错误(1,89549)。 读取XML数据时已超出最大名称字符计数限额(16384)。 nametable是用于存储XML处理期间遇到的字符串的数据结构 – 具有非重复元素名称,属性名称和属性值的长XML文档可能会触发此配额。 通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象上的MaxNameTableCharCount属性,可以增加此配额。 第1行,位置89549.如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

不知道怎么解决这个????

请尝试以下方法:

在devenv.exe所在的Visual Studio的安装目录中(例如C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE),将此部分添加到devenv.exe.cofig中

                 

在您的WCF服务的app.config中添加相同的绑定:

            

请注意,两个文件中绑定标记的name属性必须匹配 (例如,largeServiceBinding)

最后,将以下mex端点添加到服务标签中:

   

这看起来像这样:

                 

我知道它已经有一段时间了,但我遇到了同样的问题,并在codeproject中找到了其他(更简单的)解决方案

在给定的解决方案中,值在代码中而不是.config文件中设置。

  BasicHttpBinding binding = new BasicHttpBinding(); binding.Security.Mode = BasicHttpSecurityMode.Transport; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; binding.MaxReceivedMessageSize = 50000000; binding.ReaderQuotas.MaxArrayLength = 50000000; binding.ReaderQuotas.MaxStringContentLength = 50000000; binding.ReaderQuotas.MaxNameTableCharCount = 50000000; EndpointAddress endpoint = new EndpointAddress(new Uri("https://server/EWS/Exchange.asmx")); ExchangeServicePortTypeClient ews = new ExchangeServicePortTypeClient(binding, endpoint); 

但是,我更改了.config文件中相关值的值(在部分中)并解决了问题(而不是添加自定义绑定):

         

我希望这会对某人有所帮助:)

要认识到的一点是,消息指的是svcutil读者配额而不是服务配额! Svcutil对可读取的元数据数量有限制。 可以使用配置文件更改此限制。 解决方案是为svcutil创建一个配置文件,并将其放在与该工具相同的文件夹中。 下次运行svcutil时,将考虑配置文件值。

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

在您的app.config或客户端上的dll.config中添加:

             ...   ...    

你去吧! 这是WCF真正烦人的事情之一,因为谷歌经常会产生很多bs。 浪费了大量的时间。