WCF数据契约相关示例详细分析
创始人
2024-06-23 11:10:53
0

我们以前为大家介绍过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服务基本概念详解

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...