WCF进行大数据传输时的相关配置(转)
2011-12-15 08:29
302 查看
最近一直在公司用WCF做server端,后来在做性能测试时,发现一个问题,当客户端从服务端取回一个实体对象列表时,触发了channel is faulted status的异常。
仔细分析了下这个异常,应该是传递大数据造成的,因为在回传一个包含有100多个实体对象的列表时,客户端表现正常,而当回传的实体对象列表数目达到500+时,异常就出现了。
其实WCF还是做得比较灵活的,基本所有的配置项都放在程序的app.config文件里面,改动相应参数时,不需要重新编译程序。而WCF设计的初衷,为了避免DOS一类的攻击,默认在生成配置文件时,对传输的buffer数值有一定的限制,默认是65535,也就是64KB。然而在一些特定的应用场景中,区区64KB的buffer是不能满足我们需要的。这就需要我们手动在配置文件中调整buffer的size。
在配置文件中需要调整的一些参数,大致有下面几种:
WCF binding中的maxBufferSize, maxReceivedMessageSize
WCF binding ReaderQuotas中的maxArrayLength, maxBytesPerRead, maxDepth等
在一些比较极端的场景中,我们可以把它设到最大2147483647,也就是约等于2GB大小的buffer。嗯,我想,除非你是用WCF来传输1080P的高清电影,否则2GB的大小能满足绝大多数情况的需求了。
后来,我在更改相关参数大小后,发现异常依然存在,这个问题还郁闷了我很久,知道第二天,才在网上找到答案。原来,WCF的服务端和客户端,如果传递的是实体对象(Entitiy Model)一类的数据,在传输中会涉及到序列化的问题,WCF中还有个针对EndPoint的配置项,里面可以设定需要序列化的对象的最大size。后来我更改了dataContractSerializer 的maxItemsInObjectGraph属性后,这个问题,才得到了圆满的解决。修改配置文件,可以参考下面的例子:
Client配置:
?[Copy to clipboard]View Code XML
Server配置:
?[Copy to clipboard]View Code XML
修改后的客户端,支持和服务端传输1000+的实体对象列表,我想远远不止这个数量,上1w的对象估计都没问题。
原文:http://www.xiaozhou.net/dotnetdevelopment/transfer_large_objects_between_server_and_client_using_wcf-2011-07-14.htm
仔细分析了下这个异常,应该是传递大数据造成的,因为在回传一个包含有100多个实体对象的列表时,客户端表现正常,而当回传的实体对象列表数目达到500+时,异常就出现了。
其实WCF还是做得比较灵活的,基本所有的配置项都放在程序的app.config文件里面,改动相应参数时,不需要重新编译程序。而WCF设计的初衷,为了避免DOS一类的攻击,默认在生成配置文件时,对传输的buffer数值有一定的限制,默认是65535,也就是64KB。然而在一些特定的应用场景中,区区64KB的buffer是不能满足我们需要的。这就需要我们手动在配置文件中调整buffer的size。
在配置文件中需要调整的一些参数,大致有下面几种:
WCF binding中的maxBufferSize, maxReceivedMessageSize
WCF binding ReaderQuotas中的maxArrayLength, maxBytesPerRead, maxDepth等
在一些比较极端的场景中,我们可以把它设到最大2147483647,也就是约等于2GB大小的buffer。嗯,我想,除非你是用WCF来传输1080P的高清电影,否则2GB的大小能满足绝大多数情况的需求了。
后来,我在更改相关参数大小后,发现异常依然存在,这个问题还郁闷了我很久,知道第二天,才在网上找到答案。原来,WCF的服务端和客户端,如果传递的是实体对象(Entitiy Model)一类的数据,在传输中会涉及到序列化的问题,WCF中还有个针对EndPoint的配置项,里面可以设定需要序列化的对象的最大size。后来我更改了dataContractSerializer 的maxItemsInObjectGraph属性后,这个问题,才得到了圆满的解决。修改配置文件,可以参考下面的例子:
Client配置:
?[Copy to clipboard]View Code XML
1 2 3 4 5 | <endpointBehaviors> <behavior name="ClientBehavior"> <dataContractSerializer maxItemsInObjectGraph="10000000"/> </behavior> </endpointBehaviors> |
?[Copy to clipboard]View Code XML
1 2 3 4 5 | <serviceBehaviors> <behavior name="HostBehavior"> <dataContractSerializer maxItemsInObjectGraph="10000000"/> </behavior> <serviceBehaviors> |
原文:http://www.xiaozhou.net/dotnetdevelopment/transfer_large_objects_between_server_and_client_using_wcf-2011-07-14.htm
相关文章推荐
- 【转载】大数据量传输时配置WCF的注意事项
- 大数据传输下的WCF配置
- WCF 通过net tcp 协议 ,在服务端服务器和客户端服务器之间传输数据,注意配置事项
- WCF传输数据大小限制的配置以及可能会引发的异常
- WCF数据传输配置文件参数的设置说明
- 和服务器进行数据传输的相关问题
- Hibernate动态建表,通过hbm.xml配置文件创建数据表,进行数据库操作, 动态模型
- 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
- 通过直接控制DNS进程进行数据传输
- Android手机通过wifi进行数据传输(三)
- Android手机通过wifi进行数据传输(三)
- 如何进行js的跨域数据传输
- 大数据量传输时配置WCF的注意事项
- 学习配置vsftp 进行ftp文件的传输
- 无法访问请求的页面,因为该页的相关配置数据无效问题的解决
- 为什么有时候网络状态良好但是数据却没有正常进行传输?
- Spring boot项目 使用ip+port+contextPath进行访问的时候会直接显示出项目中的一些接口信息和相关数据
- 【WCF--初入江湖】10 序列化和传输大型数据流
- 掌握 Ajax,第 9 部分: 使用 JSON 进行数据传输
- win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)