WCF-003:关于 WCF 基础连接已经关闭 连接被意外关闭-序列化问题
WCF 基础连接已经关闭: 连接被意外关闭。
这个错误可能一不小心就会碰到。总结起来应该有两种情况导致:
1、传输数据过大。
第一种情况,可以采取修改本地引用服务生成的节点内的属性解决。
binding节点中maxReceivedMessageSize的值增大即可。不过一般不建议这样使用,对于大批量数据可采取分页读取方式解决。因为大批量数据传输,影响传输速度并且容易出错。
2、传输类中的属性序列化问题
这种情况我正好碰到过。如下,
服务端类的是这样的,其它属性省略。
序列化的过程是,序列化生成器将对象的基本类型 按照对象的结构 解析成流,然后传输。接收到以后,解析流中的内容,应该是将类型都变为字符串,通过字符串匹配的方式 和本地的基本类型的类型名匹配,然后恢复对象的类型,从而还原出原对象的结构和值。
但是对也这种自定义的枚举,如果没有赋值,是没有基本类型的,因此序列化就报错了。导致本地连接被关闭。而作为基本类型Int,String等因为是基类型,序列化中可以找到与之对应的类型,因此不会报错。
个人的一点观点,欢迎交流。