今天调用wcf服务获取自定义数据类 : Task 的时候,碰到 此错误提示: WCF 基础连接已经关闭: 连接被意外关闭。
google 了一下,有个帖子说有可能数据太大 config参数配置不合适,可以修改参数。
修改了客户端及服务端maxReceivedMessageSize,等参数,问题依旧。
还有帖子说是自定义类循环引用,导致系列化出错, 由于Task类结构很复杂,有很多引用类, 一一排查困难,遂将所有引用注释测试,还是出错。
后来发现,同一个TaskService 调用 List<Task> GetSubTasks(int taskID) 发法,一切正常, 而 调用 Task GetTask(int taskID) 则会出错, 说明前面两种问题应该是不存在的。
仔细对比两种方法,发现了症结所在: TaskType 枚举 。
Task 有一属性
[DataMember]
TaskType Type{get; set;}
而 TaskType 的定义为
public enum TaskType
{
TaskFlow=1,
Project=2
}
第一项值为 1,
出错的方法中,没有给TaskType 赋值, 为缺省值0 ,没有对应的枚举值, 系列化时就出错。
看来指定enum值得时候,最好还是包括0。免得系列化出错。