全面分析WCF KnownType

开发 后端
这里就增加了WCF KnownType的ClassWillProcessl类型,文章有详细的介绍,大家仔细阅读,希望可以从中得到收获。

WCF经过长时间的发展,很多用户都很了解WCF了,这里我发表一下个人理解,和大家讨论讨论。大家请注意ClassWillProcessl类型,我们需要增加哪些类型到KnownType中呢?如果我们在应用中可能将ClassB的实例赋值给ca的话,我们需要增加ClassB到KnowType中([KnowType(typeof(ClassB))]),因为ClassB派生于ClassA,所以在反序列化时存在向下造型。如果不存在这种可能性的话,可以不加。

#T#由于ia的声明类型是一个接口,所以我们需要将接口的实现类加到WCF KnownType中。在这里是ImplA和ImplB。试想一下,如果我们只增加了ImplA到KnownType中,并且我们将ImplB的实例赋给了ia,反序列化引擎还是会将其反序列化成ImplA,因为它只知道ImplA.如果我们arraylist1集合中可能会将ClassC和ClassD放入其中,由于非泛型集合都是使用Object来保存实际对象,所以我们也需要将ClassC和ClassD加入到WCF KnownType中。如果我们也希望将一个int的数组存放在numberValue中(当然在实际情况中很少发生),我么也需要将int[]加入到WCF KnownType中。

增加了KnownType的ClassWillProcessl类型如下:

  1. [DataContract]  
  2. [KnowType(typeof(ClassB))]  
  3. [KnowType(typeof(ImplA))]  
  4. [KnowType(typeof(ImplB))]  
  5. [KnowType(typeof(ClassC))]  
  6. [KnowType(typeof(ClassD))]  
  7. [KnowType(typeof(int[]))]  
  8. Public class ClassWillProcess  
  9. {  
  10. [DataMember]  
  11. ClassA ca;  
  12. [DataMember]  
  13. InterfaceA ia;  
  14. [DataMember]  
  15. ArrayList arraylist1;  
  16. Object numberValue;   
  17. [DataMember]  
  18. Public object Numbers  
  19. {  
  20. get {return numberValue;}  
  21. set {numberValue=value;}  
  22. }  
  23. }  
责任编辑:田树 来源: 博客
相关推荐

2009-11-06 14:51:14

WCF配置子节点

2009-11-06 15:54:15

WCF异步调用

2009-11-05 16:45:52

WCF可靠性传输

2009-12-22 10:16:54

WCF服务状态

2009-11-05 10:37:58

WCF Address

2009-11-06 09:22:46

WCF应用

2009-11-06 13:33:56

WCF Dispatc

2009-12-08 18:31:58

WCF WEB

2009-11-05 13:21:41

WCF架构

2009-11-05 13:54:07

WCF Service

2009-12-07 17:37:40

WCF数据

2009-11-05 16:21:51

WCF服务

2009-11-05 17:00:34

WCF有序传递

2009-11-05 08:46:10

WCF与ExtJs

2009-11-05 16:01:51

WCF单调服务

2009-09-22 11:24:07

Hibernate查询

2009-09-16 17:41:56

Linq延时执行

2009-09-16 10:48:32

LINQ查询操作

2010-03-19 12:36:12

无线中继模式

2009-11-09 12:45:44

路由负载均衡
点赞
收藏

51CTO技术栈公众号