如何實現WCF傳輸DataSet功能
那天看了WCF的相關資料片,就決定如何實現WCF傳輸DataSet,這個功能主要是通過客戶端調用服務端的一個函數,使函數接受一個DataSet的參數,然后再返回一個DataSet,這個功能很容易,使用幾段代碼就能搞定。
如果WCF傳輸DataSet內的數據量非常大的時候,那就麻煩了.(暫不討論傳輸大數據量的DataSet是否合理),WCF默認最大傳輸數據量為64K,當然可以實現修改配置文件來傳輸大數據量,可是不能解決本質的問題,我目前解決這個問題的方式是。#t#
把一個WCF傳輸DataSet序列化為一個字節,然后把這些字節進行壓縮,然后每次發送一小段字節回去,接受到這個些字節以后然后在解壓縮,再反序列化為為WCF傳輸DataSet這樣就實現了,傳入一個WCF傳輸DataSet然后再返回一個DataSet,這樣的話,就需要用到WCF的雙向通信,使用回調函數。
- int intNum = getHello.serviceTime() + 1; //獲取讀取字節流的次數
- MemoryStream Mstream = new MemoryStream();
- byte[] getbyte;
- for (int i = 1; i < intNum; i++)
- {
- getbyte = getHello.DownByte(i);
- Mstream.Write(getbyte, 0, getbyte.Length); //寫到內存中
- }
- Mstream.Position = 0;
- getbyte = new byte[Mstream.Length];
- Mstream.Read(getbyte, 0, getbyte.Length); //從內存中讀到getbyte中
- Mstream.Close();
- 反序列化
- DataSet ds = KCDataFormatter.RetrieveDataSetDecompress(getbyte); 這里就得到了服務端返回的DataSet.
getData()函數內可以編寫需要上傳的DataSet,我這里是生成20W條記錄.通過回調函數就會把這20W條數據傳入服務端,回調結束了,WCF傳輸DataSet也就傳入了服務端了.(我這里服務端沒有任何處理這個WCF傳輸DataSet就直接返回這個WCF傳輸DataSet會客戶端),客戶端繼續執行他的邏輯,此時的邏輯是把剛才傳入的服務端的Dataset再返回給客戶端。

















