IIS7 - (413)请求实体太大| 应将UploadReadAheadSize?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

我用.NET 4.0编写了一个WCF服务,它x64使用IIS 7.5 托管在我的Windows 7 旗舰版系统上。其中一个服务方法有一个“对象”作为参数,我试图发送一个包含图片的字节[]。只要这张照片的文件大小小于约。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错误请求错误,但在较新版本中,WCF开始使用413,这是此类错误的正确状态码。

你需要设置maxReceivedMessageSize你的绑定。你也可以设置readerQuotas

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding maxReceivedMessageSize="10485760">
        <readerQuotas ... />
      </binding>
    </basicHttpBinding>
  </bindings>  
</system.serviceModel>
用户回答回答于

我在使用WCF REST服务时遇到了与IIS 7.5相同的问题。尝试通过POST上传65k以上的任何文件,并且它将返回错误413“请求实体太大”。

你需要了解的第一件事是你在web.config中配置了什么样的绑定。这是一篇很棒的文章...

BasicHttpBinding与WsHttpBinding与WebHttpBinding

如果你有一个REST服务,那么你需要将它配置为“webHttpBinding”。这是修复:

<system.serviceModel>

<bindings>
   <webHttpBinding>
    <binding 
      maxBufferPoolSize="2147483647" 
      maxReceivedMessageSize="2147483647" 
      maxBufferSize="2147483647" transferMode="Streamed">
    </binding>  
   </webHttpBinding>
</bindings>

扫码关注云+社区