本地可接收任意大小文档的WCF服务远程调用报413请求实体过大错误
解决WCF服务外部调用报413 Request Entity Too Large的问题
你的情况是请求根本到不了WCF方法,说明限制不在WCF内部,得从Web服务器(IIS)、系统HTTP驱动甚至防火墙层面排查,按下面的步骤逐一验证:
1. 先改IIS请求筛选的内容长度限制
IIS默认会拦截大请求,哪怕WCF配置好了也没用:
- 打开IIS管理器,找到你的站点 → 双击「请求筛选」
- 点击右侧「编辑功能设置」,把「允许的最大内容长度(字节)」调大,比如设成
1073741824(对应1GB,可根据实际文件大小调整) - 顺便确认「最大URL长度」「最大查询字符串长度」也足够,毕竟你传的是Base64字符串,可能会很长
嫌手动改麻烦的话,直接在Web.config的<system.webServer>节点添加这段配置:
<security> <requestFiltering> <requestLimits maxAllowedContentLength="1073741824" /> <!-- 1GB --> </requestFiltering> </security>
2. 调整HTTP.sys的系统级限制
Windows自带的HTTP.sys驱动有默认请求大小上限(约30MB),这是底层拦截,必须修改注册表:
- 打开注册表编辑器(运行
regedit),定位到路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters - 新建两个DWORD值:
MaxRequestBytes:设置十进制值,比如1073741824(1GB)MaxFieldLength:设为较大值,比如65536,适配长Base64参数
- 修改完成后重启HTTP服务:命令行执行
net stop http,再执行net start http(注意这会停止所有依赖HTTP的服务,比如IIS,提前做好准备)
3. 再核对一遍WCF绑定配置
虽然你说试过Web.config的方案,但再确认下有没有遗漏关键配置:
如果使用的是basicHttpBinding,要把这些参数都配置到位:
<bindings> <basicHttpBinding> <binding name="LargeFileBinding" maxReceivedMessageSize="1073741824" maxBufferSize="1073741824" maxBufferPoolSize="1073741824"> <readerQuotas maxDepth="32" maxStringContentLength="1073741824" maxArrayLength="1073741824" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> </binding> </basicHttpBinding> </bindings>
还要确保服务端点引用了这个绑定配置:
<services> <service name="YourServiceNamespace.YourService"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeFileBinding" contract="YourServiceNamespace.IYourService" /> </service> </services>
如果是REST风格的webHttpBinding,除了上述参数,还可以添加transferMode="StreamedRequest"优化大请求传输
4. 排查防火墙/代理的限制
如果服务前端有防火墙或反向代理(比如NGINX),这些设备也可能拦截大请求:
- 检查代理服务器的配置,比如NGINX的
client_max_body_size要设置足够大 - 直接用服务器IP访问测试,若能成功,说明问题出在防火墙/代理上
5. 最后检查Postman的设置
Postman本身也有请求大小限制,概率不高但可以排除:
- 打开Postman设置 → 「General」 → 找到「Maximum allowed size for request body (MB)」,调大即可
内容的提问来源于stack exchange,提问作者Shikhar
相关产品推荐
相关产品推荐

