文章內容列表:
1. 場景:
2. 解決方案
3. wcf契約與服務實現設計靜態圖
4. wcf契約與服務實現設計詳細說明
6. 服務端啟動服務**:
7. 客戶端**
1. 場景:
wcf在網路傳輸中,大資料量傳輸造成網路阻塞,寬頻無法承受;
2. 解決方案
解決wcf在網路傳輸中的大資料量問題:
a.需要把相關資料序列化成位元組流,再對位元組流進行壓縮,再進行傳輸,到了客戶端再做反向操作便可獲得原始資料。
b.如果壓縮後的資料仍然較大時,可以再壓縮流後,再對流進行拆分即可。
(解決方案a圖)
(解決方案2)
3. wcf契約與服務實現設計靜態圖
4. wcf契約與服務實現設計詳細說明
契約介面詳細說明
服務類詳細說明
5. wcf契約與服務**實現:
契約**
契約**
1using system;
2using system.collections.generic;
3using system.linq;
4using system.runtime.serialization;
5using system.servicemodel;
6using system.text;
7/**日期:2008-04-16
9///來自:
10namespace wcfdatatransfers
1143
44
45}46
實現契約服務**
實現契約服務**
1using system;
2using system.data;
3using system.runtime.serialization;
4using system.runtime.serialization.formatters.binary;
5using system.io;
6using system.io.compression;
7using system.collections.generic;
8using system.linq;
9using system.servicemodel;
10using system.text;
11/**日期:2008-04-16
13///來自:
14namespace wcfdatatransfers
1527
28 private byte buffer_all = null;
29 private byte buffer_currect = null;
30 private int get_buffer_length = 1000;
31 private long remain_length;
32 private memorystream stream;
33 /**
34 /// 生成乙個測試的資料集
35 ///
36 ///
37 private dataset inittestdataset()
38
5152 ds.tables.add(table);
5354 return ds;
55
56 }
57 /**
58 /// 初始化壓縮位元組流
59 ///
60 ///
61 private void initbuffers(dataset ds)
62
76 /**
77 /// 提供內部使用壓縮字流的方法
78 ///
79 ///
80 ///
81 ///
82 private byte compression(byte data, compressionmode mode)
83
95 else
96 while (l != 0);
112 zip.close();
113 return os.toarray();
114 }
115 }
116 catch
117
121 finally
122
125 }
126127 idatatransfers 成員#region idatatransfers 成員
128 /**
129 /// 獲取所有位元組流
130 ///
131 ///
132 public byte getallbuffer()
133
138 /**
139 /// 設定壓縮後位元組流分塊,每一塊的大小
140 ///
141 ///
142 public void setbufferlength(int length)
143
146 /**
147 /// 讀取壓縮後位元組流一塊,並提公升位元組流的位置
148 ///
149 ///
150 public bool readnextbuffer()
151
162 else
163
168169 bo = true;
170 }
171 else
172 bo = false;
173 return bo;
174
175 }
176 /**
177 /// 獲取當前塊的位元組流
178 ///
179 ///
180 public byte getcurrentbuffer()
181
188189 #endregion
190 }
191}
1926. 服務端啟動服務**:
static void main(string args)
7. 客戶端**
code
1 //例項化wcf客戶端
2 datatransfersclient client = new datatransfersclient();
3 memorystream stream = new memorystream();
4 byte buffer;
5 //獲取所用塊壓縮流,並組裝
6 while(client.readnextbuffer())
7
11 stream.position = 0;
12 buffer= new byte[stream.length] ;
13 stream.read(buffer,0,buffer.length);
14 stream.close();
15 //解壓壓縮流
16 byte bytes = compression(buffer,compressionmode.decompress);
17 stream = new memorystream(bytes);
18 iformatter formatter = new binaryformatter();
19 //反序列化
20 dataset ds=(dataset) formatter.deserialize(stream);
21 stream.close();
22 this.datagridview1.datasource = ds;
23 this.datagridview1.datamember="test";
24 this.label1.text = ds.tables[0].rows.count.tostring();
25 client.close();
EXCEL大資料量匯出的解決方案
將web頁面上顯示的報表匯出到excel檔案裡是一種很常見的需求。潤幹報表的類excel模型,支援excel檔案資料無失真的匯入匯出,使用起來非常的方便。然而,當資料量較大的情況下,excel本身的支援最多65535行資料的問題便凸顯出來。下面就給出大資料量匯出到excel的解決方案。首先,對於資料...
C S程式對於大資料量瀏覽的解決方案
對於大資料量的使用者顯示,b s程式幾乎清一色的使用分頁的方式呈現,一般的,這種方式下使用者會檢視前幾頁的資料,當仍然沒有找到他所需要的資料時,他會選擇重新查詢。在c s下的程式中,使用分頁方式,受到了一些挑戰 一方面,老的滾動條給使用者留下了較好的體驗,在任何介面下都照搬分頁的方式顯示,會給客戶很...
測試json大資料量傳輸
最近考慮到專案以後可能需要在系統間大批量傳輸資料,一般肯定想到的是使用json,但是不確定json能不能支撐的住,所以測試下,很簡單 測試的model 對外http介面 http請求 測試結果 10萬條資料總共請求用時 1116 20萬條資料總共請求用時 611 30萬條資料總共請求用時 625 4...