成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF傳輸數(shù)據(jù)應(yīng)用技巧剖析

開發(fā) 開發(fā)工具
WCF傳輸數(shù)據(jù)的方法是一個比較簡單的操作步驟,我們可以通過集合來實(shí)現(xiàn)這一方法。在這里就先為大家詳細(xì)介紹一些相關(guān)操作。

WCF是建立在.Net Framework 2.0基礎(chǔ)之上的,它的應(yīng)用可以幫助開發(fā)人員帶來很多功能。在這里我們將會為大家詳細(xì)介紹一下有關(guān)WCF傳輸數(shù)據(jù)的相關(guān)方法,以此來方便大家理解這方面的應(yīng)用。

最近的開發(fā),一直被DataContract頭疼,微軟為了更好的通用性和代碼無關(guān)性,將DataContract進(jìn)行了一系列的優(yōu)化,使作為DataContract的類在進(jìn)行Serialize的時候會被序列化成非常通用的數(shù)據(jù)格式,可以在任何開發(fā)語言中調(diào)用。但是我們是僅僅使用C#進(jìn)行客戶端和服務(wù)器端的開發(fā),而且客戶端和服務(wù)器端交換的數(shù)據(jù)是同一個類型。

剛開始我的代碼是這樣寫的:

 

  1. using System;  
  2. using System.Collections;  
  3. using System.ServiceModel;  
  4. using System.Runtime.Serialization;  
  5. namespace JCDEV.WCF.Test1  
  6. {  
  7. [DataContract]  
  8. public class Message  
  9. {  
  10. private DataCommandCollections list;  
  11. [DataMember]  
  12. public DataCommandCollections List  
  13. {  
  14. get { return list; }  
  15. set { list = value; }  
  16. }  
  17. }  
  18. [DataContract]  
  19. public class DataCommandCollections : CollectionBase  
  20. {  
  21. [DataMember]  
  22. public IList List  
  23. {  
  24. get  
  25. {  
  26. return base.InnerList;  
  27. }  
  28. }  
  29. }  
  30. [DataContract]  
  31. public class DataCommand  
  32. {   
  33. //代碼省略...  
  34. }  

我的本意是傳遞Message類,類中包含一個DataCommand的數(shù)組,但是這樣做的結(jié)果是,生成的客戶端代碼中DataCommandCollections被修正為了一個object[],而DataCommand未被序列化。我總結(jié)一下原因是:DataCommandCollections集成于CollectionBase,該類是一個Collection的基類,內(nèi)部有一個ArrayList數(shù)組,該數(shù)組默認(rèn)是實(shí)現(xiàn)IList接口的,內(nèi)部數(shù)據(jù)是Object型,所以在序列化是就生成了Object[],而不管實(shí)際的內(nèi)部數(shù)據(jù)是何類型。

到這里我分析,DataContract在客戶端生成代碼時是根據(jù)其內(nèi)部參數(shù)的類型來決定的。因此數(shù)組必須顯性設(shè)置為DataCommand的數(shù)組,否則都將無法生成正確的代碼。

解決該問題的方法是使用List<T>來作為父類,該類通過泛型的方式指定其內(nèi)部參數(shù),下面是我改進(jìn)的程序:

 

  1. using System;  
  2. using System.Collections;  
  3. using System.ServiceModel;  
  4. using System.Runtime.Serialization;  
  5. using System.Collections.Generic;  
  6. namespace JCDEV.WCF.Test1  
  7. {  
  8. [DataContract]  
  9. public class Message  
  10. {  
  11. private DataCommandCollections list;  
  12. [DataMember]  
  13. public DataCommandCollections List  
  14. {  
  15. get { return list; }  
  16. set { list = value; }  
  17. }  
  18. }  
  19. [DataContract]  
  20. public class DataCommandCollections :List<DataCommand> 
  21. {  
  22. //代碼省略...   
  23. }  
  24. [DataContract]  
  25. public class DataCommand  
  26. {   
  27. //代碼省略...  
  28. }  

程序改進(jìn)后在生成客戶端時出錯,查了下原因是因?yàn)槿绻悓?shí)現(xiàn)了IEnumable接口時,.Net會默認(rèn)將他作為一個Collections類來進(jìn)行序列化,無需指定他為DataContract,如果需自定義,應(yīng)該使用CollectionDataContract特性。將代碼修改后就沒有錯誤了。客戶端正確的生成了一個DataCommand[]和DataCommand類。#t#

但是這樣生成的客戶端代碼其實(shí)并沒有什么用,因?yàn)榭蛻舳吮緛砭涂梢灾苯诱{(diào)用Message類,后來一個偶然的機(jī)會,我發(fā)現(xiàn)了一個新的方法,就是在客戶端添加服務(wù)引用時,選擇高級,然后將重新使用引用的程序集中的類型勾選上,這樣客戶端就不會生成一個Message類,而是直接使用自己引用的Message類了。

 

這里也可以設(shè)置對于集合類型,在客戶端解析后的生成方式,默認(rèn)是生成一個數(shù)組。

這里要注意一點(diǎn),當(dāng)使用重引用選項(xiàng)后,DataContract將無法使用,出的錯誤是“類型未被標(biāo)示為可序列化”,我是使用Serializable來代替的,這個原因是什么我還不清楚,如果有人知道,希望也告訴我一下,謝謝。

補(bǔ)充一下:“類型未被標(biāo)示為可序列化”原因找到了,是我疏忽的錯誤,呵呵,原因是我有一個對Message類進(jìn)行序列化的函數(shù),程序時在這里提示的錯誤。DataContract是可以使用的。至于.Net如何對集合進(jìn)行操作,我將稍候發(fā)布。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-23 09:34:15

WCF重載

2009-12-21 18:46:50

WCF傳輸大數(shù)據(jù)

2010-02-22 15:27:05

WCF數(shù)據(jù)契約

2010-02-22 11:25:50

WCF DateSet

2010-02-24 15:42:03

WCF服務(wù)端安全

2010-03-02 10:50:57

WCF元數(shù)據(jù)交換

2010-02-22 17:51:46

WCF傳較大數(shù)據(jù)

2010-02-22 16:19:25

WCF自托管

2010-03-01 18:11:40

WCF數(shù)據(jù)契約變更

2010-03-01 13:06:49

WCF繼承

2009-11-09 14:02:31

WCF傳輸數(shù)據(jù)

2010-01-25 17:43:13

Android資源

2009-12-21 14:49:27

2010-02-25 09:50:30

WCF路由截獲消息

2010-02-25 15:25:19

WCF通道

2010-02-22 15:20:54

WCF WS-Disc

2010-02-22 17:21:02

WCF消息交換

2009-12-21 18:10:50

WCF實(shí)現(xiàn)事件通知

2010-02-22 13:28:05

WCF異步調(diào)用

2010-02-23 14:17:20

WCF配置文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品久久国产精品 | 一区视频在线播放 | 国产精品久久在线观看 | 成人动漫视频网站 | 97精品国产97久久久久久免费 | 亚洲色综合 | 国产区精品 | 国内毛片毛片毛片毛片 | 在线观看黄色电影 | 国产永久免费 | 麻豆一区二区三区精品视频 | 亚洲精品日韩视频 | 日韩伦理一区二区三区 | 国产一级特黄aaa大片评分 | 91视频正在播放 | 色婷婷综合久久久久中文一区二区 | 久久久在线视频 | 性高湖久久久久久久久aaaaa | 日韩高清一区 | 久久久视 | 一区二区三区在线免费观看 | 国产黄色av网站 | 欧美日韩一 | 久久久久久网站 | www.中文字幕.com | 黄色成人国产 | 欧美国产一区二区 | 久久久久久蜜桃一区二区 | 日本在线黄色 | 久久久精品视频免费看 | 色毛片 | 亚洲国产精品久久久久婷婷老年 | 中文字幕在线一区 | 国产一区二区三区四区三区四 | 羞羞的视频在线看 | 欧美日韩久久精品 | 国产精品国产a级 | 日本久草| 国产在线观看不卡一区二区三区 | 国产精品久久久亚洲 | 狠狠操av |