【发布时间】:2012-02-25 15:05:14
【问题描述】:
我正在使用 jQuery $.ajax json POST 调用我的 WCF Web 服务。
输入参数之一很长 - 超过 8000 个字节。其中的数据是以逗号分隔的 GUID 列表,例如“78dace54-1eea-4b31-8a43-dcd01e172d14,ce485e64-e7c6-481c-a424-2624371180aa,ede4c606-f743-4e0a-a8cc-59bcffa7db-f0a81ed 4f6d-92d7-2fc47759a409"。
当该参数为 8176 字节 长时,请求成功。当它是 8213(多一个逗号和 GUID)时 - 请求失败。
它从浏览器和 Fiddler(HTTP 调试代理)失败。
我将此添加到网络服务配置中:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000" recursionLimit="50000"/>
</webServices>
</scripting>
</system.web.extensions>
这没有任何区别,对于超过 8176 字节长的输入参数,请求仍然失败。
该输入参数映射到 WCF 端的字符串。
我错过了什么?谢谢!
更新,这解决了我的问题: 原来这个设置控制了 JSON 消息的总长度
<webServices>
<jsonSerialization maxJsonLength="50000000" recursionLimit="50000"/>
</webServices>
还有另一个设置可以控制单个参数的最大长度:
<bindings>
<webHttpBinding>
<binding name="Binding_Name" maxReceivedMessageSize="900000">
<readerQuotas maxDepth="32" maxStringContentLength="900000" maxBytesPerRead="900000" maxArrayLength="120000" maxNameTableCharCount="120000"/>
</binding>
</webHttpBinding>
</bindings>
另外,请务必设置:
<system.web>
<httpRuntime maxRequestLength="900000"/>
希望这能解决一些令人头疼的问题!
【问题讨论】:
-
您是否尝试过将该 GUID 列表作为 JSON 数组传递?
-
IMO 它可能是browser thing。
-
请求成功后,在 Fiddler 中看到的 http 请求/回复的实际大小是多少?
-
我有同样的问题,但是当我测量整个 JSON.stringify 输出时,我发现限制是 65536,或者正好是 16 位。这不可能是巧合。 C# 或 JSON.stringify 必须有一个限制集。
标签: javascript jquery wcf json post