WCF中ReaderQuota的maxStringContentLength与Bindings的maxReceivedMessageSize区别及报错咨询
WCF中
maxReceivedMessageSize与maxStringContentLength的区别及你的问题解决 先直接给你掰明白这俩参数的核心差异:
maxReceivedMessageSize:这是绑定(Binding)层面的全局限制,管的是整个SOAP消息的总字节数——包括XML标签、消息头、所有数据字段(不止字符串)加起来的总和。你设置的2000000字节(约2MB)其实完全够装你那400KB的字符串,但问题根本不在这。maxStringContentLength:这是ReaderQuotas下属的参数,专门卡单个字符串类型数据的最大长度(按字节算)。你现在设的128000字节,而要传的字符串是400000字节,直接超了这个限制,这就是你收到(400) Bad Request的直接原因。
你的问题根源
服务端的maxStringContentLength太小,导致它无法解析你发送的大字符串,虽然maxReceivedMessageSize足够,但ReaderQuota的字符串限制先触发了错误。
解决方案
你需要在服务端和客户端的配置(或代码)里同时修改maxStringContentLength,把它调到大于等于你要传输的字符串长度(比如400000或者更大,比如500000留些余量),同时确保maxReceivedMessageSize依然能覆盖整个消息的总大小(毕竟字符串加上SOAP的其他内容总大小不能超这个值)。
配置文件示例(服务端+客户端都要改)
<bindings> <basicHttpBinding> <binding name="YourCustomBinding" maxReceivedMessageSize="2000000"> <!-- 把maxStringContentLength调到足够大 --> <readerQuotas maxStringContentLength="400000" /> </binding> </basicHttpBinding> </bindings>
代码配置示例(如果不用配置文件)
// 服务端和客户端的绑定配置都要这么写 var binding = new BasicHttpBinding(); binding.MaxReceivedMessageSize = 2000000; binding.ReaderQuotas.MaxStringContentLength = 400000;
⚠️ 注意:必须保证服务端和客户端的这两个参数配置一致,不然要么服务端拒收,要么客户端自己先拦截了消息。
内容的提问来源于stack exchange,提问作者user3094013
相关产品推荐
相关产品推荐

