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

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

创新互联公司专业为企业提供会泽网站建设、会泽做网站、会泽网站设计、会泽网站制作等企业网站建设、网页设计与制作、会泽企业网站模板建站服务,十多年会泽做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

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

我们有WCF数据契约:

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

服务契约中:

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

然后我们在客户端的代理中就算有类: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.

分享名称:WCF数据契约相关示例详细分析
新闻来源:http://www.csdahua.cn/qtweb/news43/264093.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网