具有 30mb 输入字符串的 WCF 服务 - 远程服务器返回错误:(413)请求实体太大
Posted
技术标签:
【中文标题】具有 30mb 输入字符串的 WCF 服务 - 远程服务器返回错误:(413)请求实体太大【英文标题】:WCF service with 30mb input string - The remote server returned an error: (413) Request Entity Too Large 【发布时间】:2021-05-06 21:41:47 【问题描述】:客户端使用太大的 xml(保存到文件时大约 30mb)调用我的 WCF 方法,并且 IIS 返回 413。我尝试将 uploadReadAheadSize 设置为 2gb;没用。还尝试将绑定的 maxBufferSize 增加到 2gb。
我的 WCF 服务托管在带有几台服务器的负载均衡器上;由于证书验证到位,我无法进行隔离测试。我没有尝试的是协商客户端证书,考虑到其他服务的广大消费者,我们不想更改它。
使用 uploadReadAheadSize 的默认 48kb,我能够测试 7mb 大小的 xml 字符串并且它有效。堆栈溢出/谷歌显示uploadReadAheadSize的所有发现都应该修复它。我不确定我做错了什么。客户端可能是非 .net 客户端,我对其控制较少。
【问题讨论】:
这个问题的答案可能对你有帮助:techcommunity.microsoft.com/t5/iis-support-blog/… 【参考方案1】:那不是 IIS 的问题,而是 WCF 的问题。默认情况下,WCF 将消息限制为 65KB,以避免使用大消息进行拒绝服务攻击。此外,如果您不使用 MTOM,它会将 byte[] 发送到 base64 编码字符串(大小增加 33%)=> 48KB * 1,33 = 64KB
要解决此问题,您必须重新配置服务以接受更大的消息。此问题之前触发了 400 Bad Request 错误,但在较新版本中,WCF 开始使用 413,这是此类错误的正确状态代码。
您需要在绑定中设置 maxReceivedMessageSize。您可能还需要设置 readerQuotas。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="12345.......">
<readerQuotas ... />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
https://***.com/a/10123764/6459462
【讨论】:
绑定上的所有值都设置为最大值 (2gb)。还是没有成功。以上是关于具有 30mb 输入字符串的 WCF 服务 - 远程服务器返回错误:(413)请求实体太大的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种特定的方法可以在一个输入中上传超过30张照片,而不会增加最大上传大小?