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

利用DataSet實現WCF傳輸數據

開發 后端
傳輸數據是一個很麻煩的問題,文章主要介紹了WCF傳輸數據的一個案例,希望通過看本篇文章會對大家有技術上的提高。

在網上看了大量關于WCF相關的資料,WCF現在是一個強大的技術,然后就產生一個想法.如何實現WCF傳輸數據,這個服務的主要功能是客戶端調用服務端的一個函數,這個函數接受一個DataSet的參數,然后再返回一個DataSet,當然這個功能很簡單,幾行代碼就搞定了.

#T#可是當如果DataSet內的數據量非常大的時候, 那就麻煩了.(暫不討論傳輸大數據量的DataSet是否合理),WCF默認最大傳輸數據量為64K,當然可以實現修改配置文件來傳輸大數據量,可是不能解決本質的問題,我目前解決這個問題的方式是,把一個DataSet序列化為一個字節,然后把這些字節進行壓縮,然后每次發送一小段字節回去,接受到這個些字節以后然后在解壓縮,再反序列化為為DataSet,這樣就實現了,傳入一個DataSet然后再返回一個DataSet,這樣的話,就需要用到 WCF的雙向通信,使用回調函數,WCF傳輸數據代碼如下:

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

以上就是我想出來的關于WCF傳輸數據一部分的代碼,希望大家看了會有幫助。

責任編輯:田樹 來源: 博客
相關推薦

2009-12-08 15:06:33

WCF傳輸DataSe

2009-12-21 18:46:50

WCF傳輸大數據

2010-02-22 16:26:47

WCF傳輸數據

2009-12-08 11:17:41

WCF雙向通信

2009-06-12 14:28:14

WCF傳輸安全

2009-12-08 13:06:15

WCF通道

2009-12-22 15:33:50

WCF傳輸安全

2010-02-23 17:49:56

WCF傳輸大數據

2009-11-05 16:45:52

WCF可靠性傳輸

2010-03-02 18:16:45

WCF可靠性傳輸

2009-11-09 17:17:31

WCF元數據交換

2010-02-26 09:50:57

WCF傳輸安全機制

2015-03-10 11:45:59

2023-07-13 15:01:28

2009-12-21 10:00:46

WCF基礎開發

2012-04-20 10:05:16

WCF

2010-02-25 13:35:27

WCF tcpTrac

2010-02-24 12:49:39

WCF枚舉

2011-12-21 13:25:01

WCF

2009-12-21 17:48:30

WCF方法重載
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品国产精品 | 亚洲一区av在线 | 一级做a爰片性色毛片视频停止 | 成人中文字幕av | 成人教育av | 精品国产乱码久久久久久丨区2区 | 亚洲社区在线 | 成人精品鲁一区一区二区 | 亚洲综合在线视频 | 美日韩中文字幕 | 国产高清免费在线 | 精品中文字幕一区二区三区 | 亚洲精品自在在线观看 | 91久久久久久久久 | 黄色片免费看视频 | 久久99一区二区 | 国产欧美一区二区三区国产幕精品 | 久久国产高清 | 国产精品久久久久久久久久久久 | 韩国欧洲一级毛片 | 五月激情综合网 | 国产免费拔擦拔擦8x高清 | 一区二区三区日韩 | 最新黄色毛片 | 久久精品中文字幕 | 精品国产综合 | 在线a视频| 日韩电影免费在线观看中文字幕 | 中文字幕一区二区三区不卡 | 天天搞天天搞 | 亚洲一区二区在线视频 | 亚洲精选久久 | 久艹网站| 欧美在线 | 在线观看国产视频 | 在线免费国产视频 | 91免费电影| 中文字幕乱码一区二区三区 | 国产日韩欧美在线观看 | 亚洲不卡在线观看 | 亚洲精品一级 |