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

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供會澤網(wǎng)站建設(shè)、會澤做網(wǎng)站、會澤網(wǎng)站設(shè)計、會澤網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、會澤企業(yè)網(wǎng)站模板建站服務(wù),十多年會澤做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
在正常的c#開發(fā)中我們是允許用子類去替換基類的,這也是所謂的替換原則。但是我們在WCF中確不能用數(shù)據(jù)契約的子類來替換父類的,因為這中間存在一個序列化的問題。舉個例子:
我們有WCF數(shù)據(jù)契約:
- [DataContract]
- class Employee{...}
服務(wù)契約中:
- [ServiceContract]
- interface IEmployeeManager
- {
- [OperationContract]
- void AddEmployee(Employee employee);
- }
然后我們在客戶端的代理中就算有類:Intern繼承于
- [DataContract]
- class Intern:Employee{...}
然后再客戶端調(diào)用時:
proxy.AddEmployee(new Intern())是會出錯的。因為在服務(wù)器端無法識別Intern對象,因為他無法去反序列化Intern成Employee對象(WCF序列化)。
WCF數(shù)據(jù)契約提供給我們了一個解決的辦法就是使用KnownTypeAttribute特性,在基類上標識對應(yīng)的子類就可以了。KnownTypeAttribute特性可以使用在Struct跟Class上。示例:
- [DataContract]
- [KnownType(typeof(Customer))]
- class Employee{...}
- [DataContract]
- class Intern:Employee{...}
這樣我們就在所有的WCF數(shù)據(jù)契約跟操作上,能跨越所有的服務(wù)和終結(jié)點,允許服務(wù)接受子類。但是這樣會遇到一個問題,我們不能去特定的指定某一個服務(wù)操作,所以KnownType的缺陷就是范圍過于廣泛。WCF提供了另外一個Attribute--ServiceKnownType.
網(wǎng)頁題目:WCF數(shù)據(jù)契約相關(guān)示例詳細分析
本文地址:http://www.5511xx.com/article/coopecj.html


咨詢
建站咨詢
