(413) 请求实体过大






4.85/5 (11投票s)
问题解决方案
最近我使用一个托管在 IIS7 中的 WCF Web 服务,并使用其服务方法发送包含图片的字节数组。对于小尺寸的图片,这工作正常,但当我尝试上传更大的图片时,WCF 服务返回一个错误:(413) 请求实体过大。一个月前,我在开发一个托管在 IIS 7 上通过 SSL 访问的 ASP.NET Web 应用程序时遇到了相同的错误。那时页面上没有文件上传功能。它发生在访问包含大量分页的 GridView 控件的网页时。相同的页面在 HTTP 上工作正常,但在 HTTPS 上不行。在两种情况下,我都在 Google 上搜索并找到了不同的解决方案。
1. uploadReadAheadSize
在第二种情况下,错误发生是因为页面尺寸非常大,导致提交页面时请求实体体变大。
如果您的网站启用了 SSL 和“接受客户端证书”,则 HTTP 请求将限制于该网站的 UploadReadAheadSize
。要解决此问题,您需要增加 UploadReadAheadSize
(默认大小为 48KB)。
appcmd.exe set config -section:system.webserver/serverruntime
/uploadreadaheadsize: 1048576 /commit:apphost
2. maxReceivedMessageSize
WCF 默认情况下将消息限制为 64KB,以避免使用大消息进行 DOS 攻击。默认情况下,它将 byte[]
作为 base64 编码字符串发送,这会增加消息的大小(大小增加 33%)。因此,如果上传的文件大小 ~ 大于 48KB,则会引发上述错误。(48KB * 1.33 = ~64KB)(注意:您可以使用 MTOM – 消息传输优化机制来优化消息)
通过修改 Web.config 文件中的 "maxReceivedMessageSize
" 以接受较大的消息,您可以解决此问题。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="10485760">
<readerQuotas ... />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>