WCF数据契约相关示例详细分析

开发 开发工具
WCF数据契约的应用在一定程度上受到了一些限制,那么如何才能正确的处理这些限制以达到一个完美的状态呢?在这将会对此做一个详细介绍。

我们以前为大家介绍过WCF数据契约的相关特点以及应用技巧。在这里我们将会继续根据WCF数据契约的不同类型的应用举例说明,以方便大家更进一步的对这方面内容有一个深入的了解。

在正常的c#开发中我们是允许用子类去替换基类的,这也是所谓的替换原则。但是我们在WCF中确不能用数据契约的子类来替换父类的,因为这中间存在一个序列化的问题。举个例子:

我们有WCF数据契约:

  1. [DataContract]  
  2. class Employee{...} 

服务契约中:

  1. [ServiceContract]  
  2. interface IEmployeeManager  
  3. {  
  4. [OperationContract]  
  5. void AddEmployee(Employee employee);  

然后我们在客户端的代理中就算有类:Intern继承于

  1. [DataContract]  
  2. class Intern:Employee{...} 

然后再客户端调用时:

proxy.AddEmployee(new Intern())是会出错的。因为在服务器端无法识别Intern对象,因为他无法去反序列化Intern成Employee对象(WCF序列化)。

WCF数据契约提供给我们了一个解决的办法就是使用KnownTypeAttribute特性,在基类上标识对应的子类就可以了。KnownTypeAttribute特性可以使用在Struct跟Class上。示例:

  1. [DataContract]  
  2. [KnownType(typeof(Customer))]  
  3. class Employee{...}  
  4. [DataContract]  
  5. class Intern:Employee{...} 

这样我们就在所有的WCF数据契约跟操作上,能跨越所有的服务和终结点,允许服务接受子类。但是这样会遇到一个问题,我们不能去特定的指定某一个服务操作,所以KnownType的缺陷就是范围过于广泛。WCF提供了另外一个Attribute--ServiceKnownType.

【编辑推荐】

  1. WCF部署于IIS相关技巧解析
  2. WCF字符串如果过长该如何处理
  3. WCF共享端口正确开启方法介绍
  4. WCF并发能力提高技巧分享
  5. WCF服务基本概念详解
责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-07 15:37:00

WCF控件

2009-11-20 13:11:44

Oracle XML数

2010-01-06 16:12:52

分析Json stri

2009-09-25 14:23:39

2009-09-28 10:39:01

Hibernate基础

2009-09-14 13:50:35

LINQ编程模型

2009-09-08 15:56:50

Linq使用Group

2010-01-06 13:50:37

.NET Framew

2009-09-14 16:21:34

LINQ To XML

2009-09-09 09:48:43

Linq延迟加载

2009-06-18 14:00:51

2009-10-10 13:52:57

VB Update方法

2009-12-10 13:53:58

VS2008专业版

2009-03-24 09:17:58

驱动GSMAndroid

2009-09-07 14:18:01

C#内存管理

2009-09-09 13:53:21

Linq表值函数

2009-12-03 17:41:40

PHP应用发展

2021-10-25 19:52:52

IntentFilte

2009-10-28 10:06:29

VB.NET With

2009-03-24 08:30:54

AndroidGoogle移动os
点赞
收藏

51CTO技术栈公众号