65.9K
CodeProject 正在变化。 阅读更多。
Home

(413) 请求实体过大

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (11投票s)

2013年1月4日

CPOL

2分钟阅读

viewsIcon

199364

问题解决方案

最近我使用一个托管在 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>
(413) 请求实体过大 - CodeProject - 代码之家
© . All rights reserved.