wcf 基础连接已经关闭,连接被意外关闭

 项目中在使用wcf返回数据时,发现一直报这个错误“基础连接已经关闭,连接被意外关闭”,经检查后,发现代码没有什么问题,只是一个简单的查询,调试的时候,发现返回的数据量比较大6000多个,后面在想,是不是数据量太大的原因,把返回的数据改少些,马上就成功了!那OK了,起码知道问题出在哪里。出现这个问题主要是因为接收的数据超过了wcf默认值,只需要在服务端(Wcf)修改一下配置文件还有客户端(wcf调用者)就OK了。下面看看怎么修改吧。。

 

wcf 基础连接已经关闭,连接被意外关闭 - Ss_Andy - 温故而知新 可以为师矣
上面的WCF服务的配置文件,下面再贴一张客户端的配置

 

wcf 基础连接已经关闭,连接被意外关闭 - Ss_Andy - 温故而知新 可以为师矣
 
在客户端和服务器端根据以上的图片进行配置问题就解决了!
之所以产生这个错误,主要是因为wcf默认序列化的对象超过65535个,所以这里我们要修改他的默认值即可。那到底他这个65635是怎么计算的呢,请往下看。。
例:
public class MyObject
{
public int A;
public int B;
public student C; //假设student对象里面有两个属性(非自定义)
}
 
如果wcf返回单个MyObject的话,那这里就是6个对象了,即对象个数+属性个数,如果属性又是自定义类型的话,又需要计算出里面到底有多少个属性。注意:一个MyObejct就是6个对象,那如果返回的是List<MyObject>呢,那一共有多少个对象呢?6*List<MyObject>集合个数 (即如果集合是2的话,那就有12个对象,集合是3的话,就有18个对象);这样大家就明白为什么会报上面那个错误了!
 
 
当然,出现“基础连接已经关闭,连接被意外关闭”这种情况不是说一定是返回的数据量超过序列化的默认值,也有可能是别的,所以我们在发现这个问题的时候,应该先确认是由什么原因为产生的错误,可以调试看看返回的数据量是不是过大,设置返回的集合小一些,是不是正常了,如果是的话,那就应该是这个问题。不知我表达清楚没有,不清楚的朋友可以留言。。。
 
 
嗯,看完的同学都是好同学。。
posted on 2011-11-15 10:13  Ss_Andy  阅读(6709)  评论(6编辑  收藏  举报