自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WCF數(shù)據(jù)契約相關示例詳細分析

開發(fā) 開發(fā)工具
WCF數(shù)據(jù)契約的應用在一定程度上受到了一些限制,那么如何才能正確的處理這些限制以達到一個完美的狀態(tài)呢?在這將會對此做一個詳細介紹。

我們以前為大家介紹過WCF數(shù)據(jù)契約的相關特點以及應用技巧。在這里我們將會繼續(xù)根據(jù)WCF數(shù)據(jù)契約的不同類型的應用舉例說明,以方便大家更進一步的對這方面內容有一個深入的了解。

在正常的c#開發(fā)中我們是允許用子類去替換基類的,這也是所謂的替換原則。但是我們在WCF中確不能用數(shù)據(jù)契約的子類來替換父類的,因為這中間存在一個序列化的問題。舉個例子:

我們有WCF數(shù)據(jù)契約:

  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數(shù)據(jù)契約提供給我們了一個解決的辦法就是使用KnownTypeAttribute特性,在基類上標識對應的子類就可以了。KnownTypeAttribute特性可以使用在Struct跟Class上。示例:

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

這樣我們就在所有的WCF數(shù)據(jù)契約跟操作上,能跨越所有的服務和終結點,允許服務接受子類。但是這樣會遇到一個問題,我們不能去特定的指定某一個服務操作,所以KnownType的缺陷就是范圍過于廣泛。WCF提供了另外一個Attribute--ServiceKnownType.

【編輯推薦】

  1. WCF部署于IIS相關技巧解析
  2. WCF字符串如果過長該如何處理
  3. WCF共享端口正確開啟方法介紹
  4. WCF并發(fā)能力提高技巧分享
  5. WCF服務基本概念詳解
責任編輯:曹凱 來源: 博客園
相關推薦

2009-12-07 15:37:00

WCF控件

2009-11-20 13:11:44

Oracle XML數(shù)

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-06-18 14:00:51

2009-09-09 09:48:43

Linq延遲加載

2009-10-10 13:52:57

VB Update方法

2009-09-14 16:21:34

LINQ To XML

2009-12-10 13:53:58

VS2008專業(yè)版

2009-09-04 15:43:07

C#流模型

2009-09-07 13:19:44

C#線程同步

2009-03-24 08:30:54

AndroidGoogle移動os

2010-04-26 18:17:19

Oracle存儲過程

2009-09-03 17:57:06

C#聲明事件

2009-12-16 14:09:14

Visual Stud

2011-09-24 12:34:03

點贊
收藏

51CTO技術棧公眾號