我使用 .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(使用前将#替换为@)