前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WCF学习笔记(三)

WCF学习笔记(三)

作者头像
小端
发布2018-04-16 11:43:58
6390
发布2018-04-16 11:43:58
举报
文章被收录于专栏:java架构师java架构师

今天遇到了一个很牛X的问题,多人一起解决很久,无果。

然,锲而不舍,一下午,从网络海洋里捞啊捞,终于觅得善果。

感谢这位大神,原文地址:http://hi.baidu.com/_253/blog/item/923a83f45b3c37c5f3d38559.html

本文经过了些微的整理。

WCF 传输大量数据出现“基础连接已经关闭...”错误的解决方案

按图做,如果自己的webconfig里没有相应节点,加上就好了。

先说错误:  WCF服务端配置文件: 客户端 <system.serviceModel>节点下面:   <behaviors>     <endpointBehaviors>       <behavior  >         <dataContractSerializer maxItemsInObjectGraph="100000000"  />       </behavior>     </endpointBehaviors> s </behaviors> 经过这三步设置,最后就OK了。  s   maxItemsInObjectGraph:一个整数,指定要序列化或反序列化的最大项数,可以限制对象图中要序列化的项数。 MaxItemsInObjectGraph 属性指定序列化程序在一次 ReadObject 或 WriteObject 方法调用中序列化或反序列化的对象的最大数目。该方法总是读取一个根对象,但此对象的数据成员中可以具有其他对象。这些对象又可以具有其他对象。默认值为 MaxValue。请注意,当序列化或反序列化数组时,每个数组项都计为一个单独的对象 具体分析错误原因: 这个是错误提示,在用WebService序列化的过程中,序列化的对象个数超出了65535个,也就是maxItemsInObjectGraph的默认这,造成这用情况是因为客户端与WebService之间传递的是对象,而WebService每次都要序列化对象,所以对序列化的对象的个数是有限制的,默认的就是65535,这个对象的个数是怎么计算出来的呢? 例如:现在在WebService端有一个对象Student Public class Student { Public int ID{get;set;} public Name{get;set;} } 在传递的过程中,对象的个数就是这个对象的本身加上本身所包含的对象的个数,就这个来说那么就是3个对象,要想使这三个对象能够序列化 maxItemsInObjectGraph=对象个数+2(假设maxItemsInObjectGraph默认值为0),只有在maxitemslnObjectGraph 比对象个数+2大的情况下,编译器才不会报错,要不然,就会出现上面的错误,其实还不止于此,这个的前提是只有一条记录的情况下,如果是两条记录呢,MaxItemSlnObjectGraph的最小值=对象个数*记录的条数(传递的可能是这个对象的一个集合)+2,也就是传递的数据越多,MaxItemSlnObjectGraph的值就会越大,当超过他的默认值(65536)的时候就会出现上面的错误了.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-02-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档