WCF-005:关于 WCF 基础连接已经关闭 连接被意外关闭-不是使用父类指向子类问题
2013-10-25 23:50
633 查看
基础连接已经关闭 连接被意外关闭
又被我碰到。
有这样一个场景,数据库的表中有一个字段表示的是产品,但是这个产品的类型是不同的,也就是说属性不同。为了方便管理因此都使用在该字段中了,使用clob类型,保存一段对应产品类的json的字符串。json的用法可能大家都比较熟悉。
于是我在服务端打算写这样几个方法。
产品类的模型:
该类表示这个通用字段,
契约接口,
我们先分别运行获取产品1和产品2的方法
都正确。
运行通过父类指向的获取产品1的方法,
报错
所以这种用法是行不通的,如果想要获取两个不同的产品,则需要定义两个对应的产品字段,分别赋值了。
我的理解依然是序列化时出错了,序列化时应该是序列化了子类,但是恢复时是按照父类的结构恢复的所以出现异常,反序列化失败,造成了连接断开。
测试代码下载
又被我碰到。
有这样一个场景,数据库的表中有一个字段表示的是产品,但是这个产品的类型是不同的,也就是说属性不同。为了方便管理因此都使用在该字段中了,使用clob类型,保存一段对应产品类的json的字符串。json的用法可能大家都比较熟悉。
于是我在服务端打算写这样几个方法。
产品类的模型:
该类表示这个通用字段,
[DataContract] public class AbstractModel { private string id; [DataMember] public string ID { get { return id; } set { id = value; } } }这个类表示产品1的结构,
[DataContract] public class ChildModel1:AbstractModel { private string child1ID; private string child1ProductName; [DataMember] public string Child1ID { get { return child1ID; } set { child1ID = value; } } [DataMember] public string Child1ProductName { get { return child1ProductName; } set { child1ProductName = value; } } }这个类表示产品2的结构,
[DataContract] public class ChildModel2 { private string child2ID; private string child2ProductName; [DataMember] public string Child2ID { get { return child2ID; } set { child2ID = value; } } [DataMember] public string Child2ProductName { get { return child2ProductName; } set { child2ProductName = value; } } }服务方法如下,
契约接口,
[ServiceContract] public interface IService1 { //该方法是为了客户端能访问到ChildModel1的结构 [OperationContract] ChildModel1 DoGetChild1Model(); [OperationContract] ChildModel2 DoGetChild2Model(); //该方法是为了让AbstractModel可以表示不同的产品模型 [OperationContract] AbstractModel DoGetProduct(); }实现,
public class Service1 : IService1 { public ChildModel1 DoGetChild1Model() { ChildModel1 child1 = new ChildModel1(); child1.Child1ID = "child1"; child1.Child1ProductName = "产品1"; return child1; } public ChildModel2 DoGetChild2Model() { ChildModel2 child2 = new ChildModel2(); child2.Child2ID = "child2"; child2.Child2ProductName = "产品2"; return child2; } public AbstractModel DoGetProduct() { ChildModel1 child1 = new ChildModel1(); child1.Child1ID = "child1"; child1.Child1ProductName = "产品1"; AbstractModel abmodel = child1; return abmodel; } }创建wcf应用程序运行,显示WCF调试工具界面
我们先分别运行获取产品1和产品2的方法
都正确。
运行通过父类指向的获取产品1的方法,
报错
所以这种用法是行不通的,如果想要获取两个不同的产品,则需要定义两个对应的产品字段,分别赋值了。
我的理解依然是序列化时出错了,序列化时应该是序列化了子类,但是恢复时是按照父类的结构恢复的所以出现异常,反序列化失败,造成了连接断开。
测试代码下载
相关文章推荐
- WCF-005:关于 WCF 基础连接已经关闭 连接被意外关闭-不是使用父类指向子类问题
- WCF-003:关于 WCF 基础连接已经关闭 连接被意外关闭-序列化问题
- WCF-003:关于 WCF 基础连接已经关闭 连接被意外关闭-序列化问题
- WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭
- wcf 基础连接已经关闭,连接被意外关闭
- wcf 基础连接已经关闭: 连接被意外关闭
- WCF 基础连接已经关闭:连接被意外关闭
- 错误解决: WCF 基础连接已经关闭: 连接被意外关闭
- 关于您提到使用WebServices时候遇到“基础连接以关闭”的问题
- 关于 "基础连接已经关闭:接收时发生意外错误"
- WCF问题集锦:基础连接已经关闭 接收时发生错误
- WCF 基础连接已经关闭: 连接被意外关闭。
- 关于 "基础连接已经关闭:接收时发生意外错误"
- WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭
- 使用WebServices时候遇到“基础连接以关闭”的问题
- 关于java基础中,接口里面父类的对象指向子类的引用
- 关于父类引用指向子类对象(A a = New B();)的使用,理解向上转型
- Entity Framework4.3安装以及错误(基础连接已经关闭:未能为SSL/TLS……)问题解决!
- WCF 获取数据对象时,报“基础连接已经关闭: 接收时发生错误”