当客户端传输的参数中有字节流或者是长度过大的时候,wcf就会报错。出现maxReceivedMessageSize异常解
当使用WCF的客户端调取的数据过多时,会出现这个异常。一般情况下,系统默认值是65536,大约容纳100-200条左右的数据。
那么就需要我们手动改参数WebConfig配置文件 ,以下就是我防止传输参数过大做的配置。下面一一讲解
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="LargeDataTransferServicesBinding" maxReceivedMessageSize="2147483647" transferMode="Buffered" sendTimeout="00:10:00">
<readerQuotas maxStringContentLength="2097152" />
</>
</basicHttpBinding>
</bindings>
<services>
<service name="Web.Server.WeatherService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeDataTransferServicesBinding" contract="Web.Server.IWeatherService"/>
</service>
</services>
........
.......
</system.serviceModel>
我们的服务类型是BasicHttpBinding,使用 BasicHttpBinding 的服务能够在网络上接收的消息的大小受到为每个消息分配的内存量的限制。 对消息大小进行的此限制旨在降低遭受拒绝服务 (DoS) 攻击的可能性。
在 BasicHttpBinding下的binding标签有以下属性
name: 可以随便起名,就是一个表示endpoint 的 bindingConfiguration的引用。
maxReceivedMessageSize:微软官网接解释获取或设置配置了此绑定配置的通道上可以接收的消息的最大大小(以字节为单位) 默认值为 65,536 个字节。
很好理解数据参数的最大限制,我的配置是2g。 默认值为 65,536 个字节。
transferMode:传输模式 ,我设置的Buffered 模式是缓冲传输,stream模式是字节流传输,这个要看你的传输数据是否有流。
MaxBufferSize :此属性我们没做限制,因为在不同的模式下他设置的大小必须要有要求,不然也会报错。
对于缓冲传输,(TransferMode 设置为 Buffered)。 该值始终等于由 MaxReceivedMessageSize 指定的值。
对于流传输(TransferMode 设置为 Streamed),必须对 SOAP 标头进行缓冲才能生成消息。 可根据需要对正文进行流处理。 在此情况下,MaxBufferSize 小于或等于 MaxReceivedMessageSize,其中 MaxReceivedMessageSize 限制整个消息(标头和正文)的大小,而 MaxBufferSize 限制 SOAP 标头的大小。