)直接返回DataSet对象
特点:通常组件化的处理机制,不加任何修饰及处理;
优点:代码精减、易于处理,小数据量处理较快;
缺点:大数据量的传递处理慢,消耗网络资源;
建议:当应用系统在内网、专网(局域网)的应用时,或外网(广域网)且数据量在KB级时的应用时,采用此种模式。
示例如下:
代码
- [WebMethod(Description ="直接返回 DataSet 对象。")]
- public DataSet GetNorthwindDataSet()
- {
- tring sql ="SELECT * FROM XT_TEXT";
- SqlConnection conn =new SqlConnection("Server=60.28.25.58;DataBase=s168593;user id=s168593;password=h0y+FeC*;");
- conn.Open();
- SqlDataAdapter dataadapter =new SqlDataAdapter(sql, conn);
- DataSet ds =new DataSet();
- dataadapter.Fill(ds, "XT_TEXT");
- conn.Close();
- return ds;
- }
-
客户程序调用方法:
代码
- privatevoid button1_Click(object sender, EventArgs e){
-
- /com.dzbsoft.www是上面Web Service发布后的命名空间
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now; DataSet dataSet = ds.GetNorthwindDataSet();
- this.label1.Text =string.Format("耗时:{0}", DateTime.Now - dtBegin); binddata(dataSet);
(2) 返回DataSet对象用Binary序列化后的字节数组
特点:字节数组流的处理模式;
优点
:易于处理,可以中文内容起到加密作用;
缺点
:大数据量的传递处理慢,较消耗网络资源;
代码
- [WebMethod(Description ="返回 DataSet 对象用 Binary 序列化后的字节数组。")]
- publicbyte[] GetDataSetBytes()
- {
- DataSet dataSet = GetNorthwindDataSet();
- BinaryFormatter ser =new BinaryFormatter();
- MemoryStream ms =new MemoryStream();
- ser.Serialize(ms, dataSet);
- byte[] buffer = ms.ToArray();
- return buffer;
- }
示例如下:
客户程序调用方法:
代码
- privatevoid button2_Click(object sender, EventArgs e)
- {
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now;
- byte[] buffer = ds.GetDataSetBytes();
- BinaryFormatter ser =new BinaryFormatter();
- DataSet dataSet = ser.Deserialize(new MemoryStream(buffer)) as DataSet;
- this.label2.Text =string.Format("耗时:{0}", DateTime.Now - dtBegin) +""+ buffer.Length;
- binddata(dataSet);
- }
(3) 返回DataSetSurrogate对象用Binary序列化后的字节数组
特点
:微软提供的开源组件;
优点
:易于处理,可以中文内容起到加密作用;
缺点
:大数据量的传递处理慢,较消耗网络资源;
示例如下:
代码
- [WebMethod(Description ="返回 DataSetSurrogate 对象用 Binary 序列化后的字节数组。")]
- publicbyte[] GetDataSetSurrogateBytes()
- {
- DataSet dataSet = GetNorthwindDataSet();
- DataSetSurrogate dss =new DataSetSurrogate(dataSet);
- BinaryFormatter ser =new BinaryFormatter();
- MemoryStream ms =new MemoryStream();
- ser.Serialize(ms, dss);
- byte[] buffer = ms.ToArray();
- eturn buffer;
- }
-
客户程序调用方法:
代码
- privatevoid button3_Click(object sender, EventArgs e)
-
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now;
- byte[] buffer = ds.GetDataSetSurrogateBytes();
- BinaryFormatter ser =new BinaryFormatter();
- DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;
- DataSet dataSet = dss.ConvertToDataSet();
- this.label3.Text =string.Format("耗时:{0}", DateTime.Now - dtBegin) +""+ buffer.Length;
- binddata(dataSet);
- }
-
(4)返回DataSetSurrogate对象用Binary序列化并Zip压缩后的字节数组
特点:对字节流数组进行压缩后传递;
优点:当数据量大时,性能提高效果明显,压缩比例大;
缺点:相比第三方组件,压缩比例还有待提高;
建议:当系统需要进行大数据量网络数据传递时,建议采用此种可靠、高效、免费的方法。
示例如下:
代码
- [WebMethod(Description ="返回 DataSetSurrogate 对象用 Binary 序列化并 Zip 压缩后的字节数组。")]
- publicbyte[] GetDataSetSurrogateZipBytes()
- {
- DataSet dataSet = GetNorthwindDataSet();
- DataSetSurrogate dss =new DataSetSurrogate(dataSet);
- BinaryFormatter ser =new BinaryFormatter();
- MemoryStream ms =new MemoryStream();
- ser.Serialize(ms, dss);
- byte[] buffer = ms.ToArray();
- byte[] zipBuffer = Compress(buffer);
- return zipBuffer;
- }
-
- publicbyte[] Compress(byte[] data)
- {
- try
- {
- MemoryStream ms =new MemoryStream();
- Stream zipStream =null;
- zipStream =new GZipStream(ms, CompressionMode.Compress, true);
- zipStream.Write(data, 0, data.Length);
- zipStream.Close();
- ms.Position =0;
- byte[] compressed_data =newbyte[ms.Length];
- ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));
- return compressed_data;
- }
- catch
- {
- returnnull;
- }
- }
- }
客户程序调用方法:
代码
- privatevoid button4_Click(object sender, EventArgs e)
- {
- com.dzbsoft.www.Service1 ds =new com.dzbsoft.www.Service1();
- DateTime dtBegin = DateTime.Now;
- byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes();
- byte[] buffer = UnZipClass.Decompress(zipBuffer);
- BinaryFormatter ser =new BinaryFormatter();
- DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;
- DataSet dataSet = dss.ConvertToDataSet();
- this.label4.Text =string.Format("耗时:{0}", DateTime.Now - dtBegin) +""+ zipBuffer.Length;
- binddata(dataSet);
- }
- private void binddata(DataSet dataSet) {
- this.dataGridView1.DataSource = dataSet.Tables[0];
- this.label5.Text = "共计:" + dataSet.Tables[0].Rows.Count + "条记录";
代码
- 客户端UnZipClass程序
- publicstaticclass UnZipClass
- {
- publicstaticbyte[] Decompress(byte[] data)
- {
- try
- {
- MemoryStream ms =new MemoryStream(data);
- Stream zipStream =null;
- zipStream =new GZipStream(ms, CompressionMode.Decompress);
- byte[] dc_data =null;
- dc_data = ExtractBytesFromStream(zipStream, data.Length);
- return dc_data;
- }
- catch
- {
- returnnull;
- }
- }
- publicstaticbyte[] ExtractBytesFromStream(Stream zipStream, int dataBlock)
- {
- byte[] data =null;
- int totalBytesRead =0;
- try
- {
- while (true)
- {
- Array.Resize(ref data, totalBytesRead + dataBlock +1);
- int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock);
- if (bytesRead ==0)
- {
- break;
- }
- totalBytesRead += bytesRead;
- }
- Array.Resize(ref data, totalBytesRead);
- return data;
- }
- catch
- {
- returnnull;
- }
- }
- }
-