(413) 请求实体太大 |上传预读大小

2024-03-03

我使用 .NET 4.0 编写了一个 WCF 服务,该服务托管在我的 Windows 7 上x64带有 IIS 7.5 的终极系统。 其中一个服务方法有一个“对象”作为参数,我正在尝试发送一个包含图片的字节[]。 只要该图片的文件大小小于约。 48KB,一切顺利。但如果我尝试上传更大的图片,WCF 服务会返回错误:(413) Request Entity Too Large.因此,我当然花了 3 个小时在谷歌上搜索错误消息,并且我看到的有关此主题的每个主题都建议提高“uploadReadAheadSize”属性。 所以我所做的是使用以下命令(10485760 = 10MB):

"appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 10485760 /commit:apphost"

"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"

我还使用 IIS 管理器通过打开站点并转到“管理”下的“配置编辑器”来设置该值。 不幸的是,我仍然收到“请求实体太大”错误,这真的令人沮丧!

那么有人知道我还能尝试什么来修复这个错误吗?


这不是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="10485760">
        <readerQuotas ... />
      </binding>
    </basicHttpBinding>
  </bindings>  
</system.serviceModel>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(413) 请求实体太大 |上传预读大小 的相关文章

随机推荐