WCF - 读取 XML 数据时超出了最大命名表字符计数配额 (16384)
我有一个使用 wsHttpBinding 的 WCF 服务。服务器配置如下:
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
在客户端,我包含 WCF 服务的服务引用。如果我的 IService 功能有限(例如 90 个操作合同),但如果再添加一个操作合同,我将无法更新服务引用,也无法添加该服务引用,那么它会很好用。在这篇文章中提到,通过更改这些配置文件(即 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 /墨西哥'。 XML 文档中存在错误 (1, 89549)。 读取 XML 数据时超出了最大命名表字符计数配额 (16384)。名称表是一种数据结构,用于存储 XML 处理过程中遇到的字符串 - 具有不重复元素名称、属性名称和属性值的长 XML 文档可能会触发此配额。通过更改创建 XML 读取器时使用的 XmlDictionaryReaderQuotas 对象的 MaxNameTableCharCount 属性,可以增加此配额。 1号线,位置89549。 如果当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。
知道如何解决这个问题吗?
I'm having a WCF Service that uses wsHttpBinding. The server configuration is as follows :
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
At the client side I'm including the Service reference of the WCF-Service. It works great if I have limited functions say 90 Operation Contract in my IService but if add one more OperationContract than I'm unable to Update the Service reference nor i'm able to add that service reference. In this article it's mentioned that by changing those config files(i.e devenv.exe.config, WcfTestClient.exe.config and SvcUtil.exe.config) it will work but even including those bindings in those config files still that error pops up saying
There was an error downloading 'http://10.0.3.112/MyService/Service1.svc/mex'.
The request failed with HTTP status 400: Bad Request.
Metadata contains a reference that cannot be resolved: 'http://10.0.3.112/MyService/Service1.svc/mex'.
There is an error in XML document (1, 89549).
The maximum nametable character count quota (16384) has been exceeded while reading XML data. The nametable is a data structure used to store strings encountered during XML processing - long XML documents with non-repeating element names, attribute names and attribute values may trigger this quota. This quota may be increased by changing the MaxNameTableCharCount property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 89549.
If the service is defined in the current solution, try building the solution and adding the service reference again.
Any idea how to solve this????
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
尝试以下操作:
在 devenv.exe 所在的 Visual Studio 安装目录(例如 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE)中,将此部分添加到
app.config 中的 devenv.exe.cofig您的 WCF 服务添加相同的绑定:
请注意,两个文件中的绑定标记的名称属性必须匹配(例如largeServiceBinding)
最后将以下 mex 端点添加到您的服务标记中:
这可能如下所示:
Try the following:
In the installation directory of your Visual Studio where devenv.exe is located (e.g. C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE) add this section to the devenv.exe.cofig
in the app.config of your WCF-service add the same binding:
Note that the name attribute of the binding tags from the two files must match (e.g. largeServiceBinding)
Finally add the following mex endpoint into your service tag:
this may look like this:
我知道已经有一段时间了,但我遇到了同样的问题并找到了其他(更简单的)解决方案 in codeproject
在给出的解决方案中,值是在代码中设置的,而不是在 .config 文件中设置的。
但是,我更改了 .config 文件中相关值中的值(在
和
部分中)并解决了问题(而不是添加自定义绑定):我希望这会对某人有所帮助:)
I know it has been a while, but I got the same problem and found other (simpler) solution in codeproject
In the solution given there the values are set in the code rather than the .config file.
However, I changed the values in the relevant values in the .config file ( in both the
<binding>
and the<readerQuotas>
sections) and solved the problem (rather than adding custom bindings):I hope this will help somebody :)
需要认识到的一件事是,该消息指的是 svcutil 读取器配额而不是服务配额! Svcutil 对它可以读取的元数据数量有限制。可以使用配置文件更改此限制。解决方案是为 svcutil 创建一个配置文件并将其放置在与该工具相同的文件夹中。下次运行 svcutil 时,将考虑配置文件值。
http://geekswithblogs.net/claraoscura/archive/2007/08/ 20/114806.aspx
One thing to recognize is that the message refers to the svcutil reader quotas not the service ones! Svcutil has a limit on how much metadata it can read. This limit can be changed with a config file. The solution is to create a config file for svcutil and place it in the same folder as the tool. Next time you run svcutil, the config file values will be taken into account.
http://geekswithblogs.net/claraoscura/archive/2007/08/20/114806.aspx
在客户端的 app.config 或 dll.config 中添加:
就这样!
这是 WCF 中真正令人烦恼的事情之一,而且谷歌经常会给你带来很多废话。为此浪费了大量时间。
in your app.config or dll.config on the the client add:
And there you go!
This is one of the really annoying things with WCF and as often google just yields you alot of bs. Wasted tons of time with this.