WCF大数据量传输配置
来源:互联网 发布:重庆网络问政爆料平台 编辑:程序博客网 时间:2024/04/29 21:56
WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置:
1、MaxReceivedMessageSize:获取或设置配置了此绑定的通道上可以接收的消息的最大大小。
basicHttpBinding等预定义的绑定一般具有MaxReceivedMessageSize属性,CustomBinding则需要在Transport中定义。
示例代码:
- <bindings>
- <customBinding>
- <binding name="customBinding">
- <binaryMessageEncoding>
- </binaryMessageEncoding>
- <httpTransport maxReceivedMessageSize="2147483647">
- </httpTransport>
- </binding>
- </customBinding>
- <basicHttpBinding>
- <binding name="basicBinding" maxReceivedMessageSize="2147483647"></binding>
- </basicHttpBinding>
- </bindings>
网上许多地方说应同时设置MaxBufferSize(获取或设置缓冲区的最大大小,该缓冲区用于接收来自通道的消息。),根据MSDN上的解释:
“MaxBufferSize 属性的值及其重要性有所不同,这取决于是否在接收消息的通道上对消息进行缓冲或流处理:
* 对于缓冲传输,(TransferMode 设置为 Buffered)。该值始终等于由 MaxReceivedMessageSize 指定的值。
* 对于流传输(TransferMode 设置为 Streamed),必须对 SOAP 标头进行缓冲才能生成消息。可根据需要对正文进行流处理。在此情况下,MaxBufferSize 小于或等于MaxReceivedMessageSize,其中 MaxReceivedMessageSize 限制整个消息(标头和正文)的大小,而 MaxBufferSize 仅限制 SOAP 标头的大小。”
可见,对于默认的缓冲传输,设置该属性是不必要的。
2、ReaderQuotas:获取或设置可由配置了此绑定的终结点处理的 SOAP 消息的复杂性约束。
该属性是XmlDictionaryReaderQuotasElement类型,一般需要设置该属性的MaxArrayLength、MaxStringContentLength及MaxDepth属性。
示例代码:
- <bindings>
- <customBinding>
- <binding name="customBinding">
- <binaryMessageEncoding>
- <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxDepth="64"/>
- </binaryMessageEncoding>
- <httpTransport maxReceivedMessageSize="2147483647">
- </httpTransport>
- </binding>
- </customBinding>
- <basicHttpBinding>
- <binding name="basicBinding" maxReceivedMessageSize="2147483647">
- <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxDepth="64"/>
- </binding>
- </basicHttpBinding>
- </bindings>
3、MaxItemsInObjectGraph:获取对象图中要序列化或反序列化的最大项数。
该属性属于DataContractSerializer类,需要在serviceBehaviors下的behavior节中配置。
示例代码:
- <behaviors>
- <serviceBehaviors>
- <behavior name="Wcf4BigData.Web.BigDataServiceBehavior">
- <serviceMetadata httpGetEnabled="true"/>
- <serviceDebug includeExceptionDetailInFaults="false"/>
- <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
- </behavior>
- </serviceBehaviors>
- </behaviors>
以上是传输大数据量时可能需要设置的属于WCF的几个属性,示例代码中大多将属性值设置为允许的最大值,但设置后并不能保证WCF一定具有传输如此大数据量的能力。另外,这些属性一般需要在服务端和客户端同时设置,但如果使用Silverlight客户端,部分属性如ReaderQuotas并不被支持。
4、MaxRequestLength:获取或设置请求的最大大小。
如果WCF以IIS作为宿主,WCF传输数据量的能力还受到HttpRunttime设置的制约,可能需要同时HttpRunttime(在 system.Web节中)的MaxRequestLength属性。MaxRequestLength属性表示请求的最大大小(以千字节为单位)。默认大小为 4096 KB (4 MB),允许的最大值是2097151。
示例代码:
- <httpRuntime maxRequestLength="2097151"/>
使用以上配置进行测试,从WCF端获取1000万条长度为10的字符串是成功的。每个长度为10的字符串编码后约占32个字节,如此算来,成功传输的数据已经超过300M了,算得上不小的数字了,如果数据量比这还要大的话,怕是网速已经不能满足要求了,这时需要考虑其他的解决方案。
- WCF大数据量传输配置
- WCF大数据量传输配置
- WCF大数据量传输解决方案
- WCF大数据量传输解决方案
- 大数据量传输时配置WCF的注意事项
- WCF大数据量传输的详细步骤
- WCF传输数据量大的问题
- wcf传输Dataset大数据量(转)
- WCF大数据量处理
- 实现WCF传输大数据
- WCF RESTful 方式的大数据量限制
- 串口通信如何传输大数据量
- c语言socket 传输 大数据量
- c语言socket 传输 大数据量
- webservice用于大数据量传输的处理
- WebService下实现大数据量的传输
- 解决Ice 对象大数据量传输Bug
- 解决Ice 对象大数据量传输Bug
- RHEL7-文件的归档和压缩
- WaitForSingleObject -- setevent 讲解与编程示例
- Hibernate中对象的三种状态及相互转化
- Loadrunner实现文件读写功能
- Delphi的几种类型转换
- WCF大数据量传输配置
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛
- Windows中获取线程起始地址
- 应用正则表达式实现input标签自动控制输入数字
- Android 干货客户端开发总结
- usaco堆积木(记得国王游戏的简化版,思路一样)
- jeval-java计算公式工具包
- [iOS]从URL远程请求图片