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

WCF DateSet應用技巧詳解

開發(fā) 開發(fā)工具
WCF DateSet的操作在實際應用中起到了很重要的作用。初學者們可以在這里來詳細的了解一下其中的相關(guān)操作技巧,來幫助我們解決相關(guān)問題。

WCF開發(fā)工具是.NET Framework 3.5中的一個重要的組成部分,我們可以通過它的幫助來實現(xiàn)許多需求。在這里我們可以先來了解一下WCF DateSet的相關(guān)概念,希望可以幫助我們來解決一些問題。

這幾天看了WCF相關(guān)的資料,然后就產(chǎn)生一個想法.如何實現(xiàn)WCF實現(xiàn)傳輸DataSet,這個服務的主要功能是客戶端調(diào)用服務端的一個函數(shù),這個函數(shù)接受一個DataSet的參數(shù),然后再返回一個DataSet,當然這個功能很簡單,幾行代碼就搞定了.可是當如果DataSet內(nèi)的數(shù)據(jù)量非常大的時候,那就麻煩了.(暫不討論傳輸大數(shù)據(jù)量的DataSet是否合理),WCF默認最大傳輸數(shù)據(jù)量為64K,當然可以實現(xiàn)修改配置文件來傳輸大數(shù)據(jù)量,可是不能解決本質(zhì)的問題,我目前解決這個問題的方式是,把一個DataSet序列化為一個字節(jié),然后把這些字節(jié)進行壓縮,然后每次發(fā)送一小段字節(jié)回去,接受到這個些字節(jié)以后然后在解壓縮,再反序列化為為DataSet,這樣就實現(xiàn)了,傳入一個WCF DateSet然后再返回一個DataSet,這樣的話,就需要用到WCF的雙向通信,使用回調(diào)函數(shù)。

  1. DuplexChannelFactory<IHello> channelFactory = new DuplexChannelFactory
    <IHello>(new InstanceContext(new ClientCallBack()), "defaultEndpoint");  
  2. IHello getHello = channelFactory.CreateChannel();  
  3. //傳入DataSet到服務端  
  4. getHello.SayHelloTo();  
  5. 首先客戶端調(diào)用服務端的函數(shù)SayHelloTo(),  
  6. public void SayHelloTo()  
  7. {  
  8. //讀取客戶端傳入的WCF DateSet  
  9. #region 服務端的數(shù)據(jù)  
  10. ICallback callback = OperationContext.Current.GetCallbackChannel
    <ICallback>();  
  11. int intNum = callback.getTimes() + 1; //獲取讀取字節(jié)流的次數(shù)  
  12. MemoryStream Mstream = new MemoryStream();  
  13. byte[] getbyte;  
  14. for (int i = 1; i < intNum; i++)  
  15. {  
  16. getbyte = callback.getBytes(i);  
  17. Mstream.Write(getbyte,0,getbyte.Length);//寫到內(nèi)存中  
  18. }  
  19. Mstream.Position = 0;  
  20. getbyte = new byte[Mstream.Length];  
  21. Mstream.Read(getbyte, 0, getbyte.Length);//從內(nèi)存中讀到getbyte中  
  22. Mstream.Close();  
  23. //反序列化  
  24. ServiceData = KCDataFormatter.RetrieveDataSetDecompress(getbyte);  
  25. //----------------------------  
  26. //此處得到序列化以后的字節(jié),可以再反序列化為DataSet,
    得到DataSet就可以對個DataSet做處理,刪除,修改,  
  27. //處理完成再把處理完成的DataSet賦值給ServiceData,就可以了  
  28. //----------------------------  
  29. #endregion  
  30. }ICallback callback = OperationContext.Current.
    GetCallbackChannel
    <ICallback>();  
  31. 此時就會調(diào)用客戶端的回調(diào)函數(shù)  
  32. public class ClientCallBack : ICallback  
  33. {  
  34. #region ICallBack 成員  
  35. //要上傳的數(shù)據(jù)  
  36. public void getData()  
  37. {  
  38. DataSet ds = new DataSet("test");  
  39. DataTable table = new DataTable("test");  
  40. DataColumn column = new DataColumn("test");  
  41. column.DataType = Type.GetType("System.String");  
  42. table.Columns.Add(column);  
  43. DataRow row;  
  44. for (int i = 0; i < 200000; i++)  
  45. {  
  46. row = table.NewRow();  
  47. row["test"] = "Hello";  
  48. table.Rows.Add(row);  
  49. }  
  50. ds.Tables.Add(table);  
  51. byte_All = KCDataFormatter.GetBinaryFormatDataCompress(ds);  
  52. }  
  53. private int i = 1000; //每次讀取字節(jié)的數(shù)量  
  54. byte[] byte_All;//獲取要上傳的字節(jié)流  
  55. MemoryStream Mstream;//流  
  56. public byte[] getBytes(int intNum)  
  57. {  
  58. int j = 1000;  
  59. byte[] buffer;  
  60. if (intNum < iti) //判斷是否是最后一次循環(huán)  
  61. {  
  62. buffer = new byte[1000];  
  63. }  
  64. else  
  65. {  
  66. int nn = byte_All.Length - ((iti - 1) * 1000);  
  67. buffer = new byte[nn];  
  68. j = nn;  
  69. }  
  70. int iold = (i * (intNum - 1)); //記錄上一次的字節(jié)位置  
  71. Mstream = new MemoryStream();  
  72. Mstream.Write(byte_All, iold, j);//從byte_All中
    的第iolld開始寫入j(最多不超過)個到內(nèi)存中  
  73. buffer = Mstream.ToArray();  
  74. Mstream.Close();  
  75. Mstream.Dispose();  
  76. return buffer;  
  77. }  
  78. private int iti = 0; //初始化循環(huán)次數(shù)  
  79. public int getTimes() //將數(shù)據(jù)流分為多少部分  
  80. {  
  81. getData();  
  82. int temp = byte_All.Length / 1000;  
  83. int intNum = byte_All.Length % 1000 != 0 ? temp + 1 : temp;  
  84. iti = intNum;  
  85. return intNum;  
  86. }  
  87. #endregion  

getData()函數(shù)內(nèi)可以編寫需要上傳的WCF DateSet,我這里是生成20W條記錄.通過回調(diào)函數(shù)就會把這20W條數(shù)據(jù)傳入服務端,回調(diào)結(jié)束了,DataSet也就傳入了服務端了.(我這里服務端沒有任何處理這個DataSet就直接返回這個DataSet會客戶端),客戶端繼續(xù)執(zhí)行他的邏輯,此時的邏輯是把剛才傳入的服務端的Dataset再返回給客戶端

  1. //獲取服務端返回的DataSet  
  2. int intNum = getHello.serviceTime() + 1; //獲取讀取字節(jié)流的次數(shù)  
  3. MemoryStream Mstream = new MemoryStream();  
  4. byte[] getbyte;  
  5. for (int i = 1; i < intNum; i++)  
  6. {  
  7. getbyte = getHello.DownByte(i);  
  8. Mstream.Write(getbyte, 0, getbyte.Length);//寫到內(nèi)存中  
  9. }  
  10. Mstream.Position = 0;  
  11. getbyte = new byte[Mstream.Length];  
  12. Mstream.Read(getbyte, 0, getbyte.Length);//從內(nèi)存中讀到getbyte中  
  13. Mstream.Close();  
  14. //反序列化  
  15. DataSet ds = KCDataFormatter.RetrieveDataSetDecompress(getbyte); 

這里就得到了服務端返回的WCF DateSet.全部代碼已經(jīng)打包,vs2008中文版編譯通過!

【編輯推薦】

  1. WCF獲取客戶端IP應用經(jīng)驗分享
  2. WCF元數(shù)據(jù)應用方法介紹
  3. PDA訪問WCF具體步驟淺析
  4. WCF Stream正確應用指南
  5. WCF上傳文件解決方案剖析
責任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-25 11:23:29

WCF返回自定義格式

2010-03-01 13:06:49

WCF繼承

2010-02-22 16:19:25

WCF自托管

2010-02-22 16:26:47

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

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實現(xiàn)事件通知

2010-02-22 13:28:05

WCF異步調(diào)用

2010-02-22 17:51:46

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

2010-02-23 14:17:20

WCF配置文件

2010-02-25 10:52:29

WCF響應服務

2010-02-26 13:40:28

WCF消息頭

2010-02-23 13:03:34

WCF序列化

2010-02-25 16:45:13

WCF應用技巧

2010-02-26 10:46:12

WCF行為擴展

2010-03-01 09:48:23

WCF會話服務

2010-03-01 15:40:04

WCF實例停用
點贊
收藏

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

主站蜘蛛池模板: 北条麻妃视频在线观看 | 涩涩鲁亚洲精品一区二区 | 精品亚洲永久免费精品 | 最近日韩中文字幕 | 曰韩一二三区 | 国产成人精品一区二区三区四区 | av网站推荐 | 在线播放国产视频 | 精品国产一区二区三区性色av | 亚洲毛片在线 | 一区二区三区精品视频 | 亚洲国产欧美日韩 | 国产成人免费观看 | 欧美男人天堂 | 播放一级黄色片 | 精品国模一区二区三区欧美 | 国产高清精品一区二区三区 | 久久精品成人 | 丁香久久| 久久精品国产一区二区三区 | 亚洲在线电影 | 一区不卡在线观看 | 无码国模国产在线观看 | 亚洲精品久久久久久国产精华液 | 美国黄色一级片 | 91小视频在线 | 国产欧美一区二区三区另类精品 | 久久久精品一区二区三区四季av | 久久久久久91| 亚洲啪啪一区 | 成年免费在线观看 | 亚洲精品在线免费 | 欧美综合久久 | 国产精品久久久久久福利一牛影视 | 国产精品久久久久久久久久久免费看 | 国产精品嫩草影院精东 | 日韩av一区二区在线观看 | www.久草 | 亚洲夜射 | 成人精品一区 | 91精品在线观看入口 |