WCF接收消息大小配额超出:修改配置后仍报错
解决WCF消息大小配额超出且配置修改不生效的问题
看起来你已经做了基础的配置调整,但还是碰到了WCF里经典的消息大小限制坑,而且配置修改不生效的情况也很常见,咱们一步步来排查解决:
首先确认客户端配置的完整性与正确性
你的服务端配置看起来是没问题的——myBasicBinding已经把maxReceivedMessageSize和maxBufferSize拉到了最大值,readerQuotas也做了对应调整。但客户端配置没贴全,这里要重点检查几个核心点:
- 客户端endpoint必须绑定指定的配置:如果你的客户端endpoint没有显式设置
bindingConfiguration属性,它会默认使用basicHttpBinding的默认配置,而默认的maxReceivedMessageSize就是65536,这会直接触发报错。 - 补全客户端的binding配置:客户端的binding参数要和服务端完全对应,参考下面的完整示例:
<system.serviceModel> <bindings> <basicHttpBinding> <!-- 名称要和endpoint的bindingConfiguration严格对应 --> <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00"> <readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:50517/Service1.svc" binding="basicHttpBinding" <!-- 必须指定上面定义的绑定配置名称 --> bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1" name="BasicHttpBinding_IService1" /> </client> </system.serviceModel>
解决配置修改不永久生效的问题
你已经关闭了“Always regenerate config when launching services”,但还有两个容易忽略的陷阱:
- 检查输出目录的配置文件:Visual Studio编译后会把配置文件复制到
bin/Debug(或Release)目录,有时候你修改的是项目根目录的配置,但输出目录的文件没同步更新。手动打开输出目录下的web.config或app.config,确认你的修改已经生效。 - WCF测试客户端的临时配置坑:如果你用的是Visual Studio自带的WCF测试客户端,它不会使用你项目里的配置,而是在系统临时目录生成独立的配置文件。你需要找到这个路径手动修改:
- 路径一般是
C:\Users\[你的用户名]\AppData\Local\Temp\TestClientProjects\[随机字符串]\[版本号]\config - 找到里面的
app.config,按照上面的示例修改binding参数,保存后重启测试客户端。
- 路径一般是
额外的ASP.NET请求限制检查
如果你的客户端是ASP.NET应用,除了WCF的配置,还要检查ASP.NET本身的请求大小限制:
- 在
system.web节点下添加maxRequestLength(单位为KB):
<system.web> <httpRuntime targetFramework="4.6.1" maxRequestLength="2147483" /> <!-- 对应2GB --> </system.web>
- 对于IIS 7及以上版本,还要在
system.webServer节点下配置requestLimits(单位为字节):
<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="2147483647" /> <!-- 对应2GB --> </requestFiltering> </security> </system.webServer>
最后一步:重启服务与客户端
不管做了什么配置修改,一定要重启你的WCF服务和客户端应用,确保配置完全加载生效。
按照上面的步骤排查后,应该就能解决“消息大小配额超出”的问题了。
内容的提问来源于stack exchange,提问作者invrt
相关产品推荐
相关产品推荐

