怎样提高WebService的性能

服务器端WebService程序: 

C#代码  收藏代码
    1. using System.Runtime.Serialization.Formatters.Binary;  
    2. using System.IO;  
    3. using System.IO.Compression;  
    4. using System.Data.SqlClient;  
    5. ………  
    6. public class Service1 : System.Web.Services.WebService  
    7. {  
    8.   
    9.     [WebMethod(Description = "直接返回 DataSet 对象。")]  
    10.     public DataSet GetNorthwindDataSet()  
    11.     {  
    12.         string sql = "SELECT * FROM XT_TEXT";  
    13.         SqlConnection conn = new SqlConnection("Server=60.28.25.58;DataBase=s168593;user id=s168593;password=h0y+FeC*;");  
    14.         conn.Open();  
    15.         SqlDataAdapter dataadapter = new SqlDataAdapter(sql, conn);  
    16.         DataSet ds = new DataSet();  
    17.         dataadapter.Fill(ds, "XT_TEXT");  
    18.         conn.Close();  
    19.         return ds;  
    20. }  
    21.   
    22. [WebMethod(Description = "返回 DataSet 对象用 Binary 序列化后的字节数组。")]  
    23.     public byte[] GetDataSetBytes()  
    24.     {  
    25.         DataSet dataSet = GetNorthwindDataSet();  
    26.         BinaryFormatter ser = new BinaryFormatter();  
    27.         MemoryStream ms = new MemoryStream();  
    28.         ser.Serialize(ms, dataSet);  
    29.         byte[] buffer = ms.ToArray();  
    30.         return buffer;  
    31. }  
    32.   
    33.     [WebMethod(Description = "返回 DataSetSurrogate 对象用 Binary 序列化后的字节数组。")]  
    34.     public byte[] GetDataSetSurrogateBytes()  
    35.     {  
    36.         DataSet dataSet = GetNorthwindDataSet();  
    37.         DataSetSurrogate dss = new DataSetSurrogate(dataSet);  
    38.         BinaryFormatter ser = new BinaryFormatter();  
    39.         MemoryStream ms = new MemoryStream();  
    40.         ser.Serialize(ms, dss);  
    41.         byte[] buffer = ms.ToArray();  
    42.         return buffer;  
    43. }  
    44.   
    45.     [WebMethod(Description = "返回 DataSetSurrogate 对象用 Binary 序列化并 Zip 压缩后的字节数组。")]  
    46.     public byte[] GetDataSetSurrogateZipBytes()  
    47.     {  
    48.         DataSet dataSet = GetNorthwindDataSet();  
    49.         DataSetSurrogate dss = new DataSetSurrogate(dataSet);  
    50.         BinaryFormatter ser = new BinaryFormatter();  
    51.         MemoryStream ms = new MemoryStream();  
    52.         ser.Serialize(ms, dss);  
    53.         byte[] buffer = ms.ToArray();  
    54.         byte[] zipBuffer = Compress(buffer);  
    55.         return zipBuffer;  
    56. }  
    57.   
    58.     public byte[] Compress(byte[] data)  
    59.     {  
    60.         try  
    61.         {  
    62.             MemoryStream ms = new MemoryStream();  
    63.             Stream zipStream = null;  
    64.             zipStream = new GZipStream(ms, CompressionMode.Compress, true);  
    65.             zipStream.Write(data, 0, data.Length);  
    66.             zipStream.Close();  
    67.             ms.Position = 0;  
    68.             byte[] compressed_data = new byte[ms.Length];  
    69.             ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));  
    70.             return compressed_data;  
    71.         }  
    72.         catch  
    73.         {  
    74.             return null;  
    75.         }  
    76.     }  
    77. }  
    78.   
    79.   
    80. 客户端WebService程序  
    81. [code ="C#"]  
    82.   
    83. private void button1_Click(object sender, EventArgs e)  
    84. {  
    85.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
    86.     DateTime dtBegin = DateTime.Now;  
    87.     DataSet dataSet = ds.GetNorthwindDataSet();  
    88.     this.label1.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin);  
    89.     binddata(dataSet);  
    90. }  
    91. private void button2_Click(object sender, EventArgs e)  
    92. {  
    93.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
    94.     DateTime dtBegin = DateTime.Now;  
    95.     byte[] buffer = ds.GetDataSetBytes();  
    96.     BinaryFormatter ser = new BinaryFormatter();  
    97.     DataSet dataSet = ser.Deserialize(new MemoryStream(buffer)) as DataSet;  
    98.     this.label2.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin) + "  " + buffer.Length;  
    99.     binddata(dataSet);  
    100. }  
    101. private void button3_Click(object sender, EventArgs e)  
    102. {  
    103.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
    104.     DateTime dtBegin = DateTime.Now;  
    105.     byte[] buffer = ds.GetDataSetSurrogateBytes();  
    106.     BinaryFormatter ser = new BinaryFormatter();  
    107.     DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;  
    108.     DataSet dataSet = dss.ConvertToDataSet();  
    109.     this.label3.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin) + "  " + buffer.Length;  
    110.     binddata(dataSet);  
    111. }  
    112. private void button4_Click(object sender, EventArgs e)  
    113. {  
    114.     com.dzbsoft.www.Service1 ds = new com.dzbsoft.www.Service1();  
    115.     DateTime dtBegin = DateTime.Now;  
    116.     byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes();  
    117.     byte[] buffer = UnZipClass.Decompress(zipBuffer);  
    118.     BinaryFormatter ser = new BinaryFormatter();  
    119.     DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;  
    120.     DataSet dataSet = dss.ConvertToDataSet();  
    121.     this.label4.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin) + "  " + zipBuffer.Length;  
    122.     binddata(dataSet);  
    123. }  
    124. private void binddata(DataSet dataSet)  
    125. {  
    126.     this.dataGridView1.DataSource = dataSet.Tables[0];  
    127.     this.label5.Text = "共计:" + dataSet.Tables[0].Rows.Count + "条记录";  
    128. }  
    129.   
    130.   
    131.   
    132. 客户端UnZipClass程序  
    133. [code ="C#"]  
    134. public static class UnZipClass  
    135. {  
    136.     public static byte[] Decompress(byte[] data)  
    137.     {  
    138.         try  
    139.         {  
    140.             MemoryStream ms = new MemoryStream(data);  
    141.             Stream zipStream = null;  
    142.             zipStream = new GZipStream(ms, CompressionMode.Decompress);  
    143.             byte[] dc_data = null;  
    144.             dc_data = ExtractBytesFromStream(zipStream, data.Length);  
    145.             return dc_data;  
    146.         }  
    147.         catch  
    148.         {  
    149.             return null;  
    150.         }  
    151.     }  
    152.     public static byte[] ExtractBytesFromStream(Stream zipStream, int dataBlock)  
    153.     {  
    154.         byte[] data = null;  
    155.         int totalBytesRead = 0;  
    156.         try  
    157.         {  
    158.             while (true)  
    159.             {  
    160.                 Array.Resize(ref data, totalBytesRead + dataBlock + 1);  
    161.                 int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock);  
    162.                 if (bytesRead == 0)  
    163.                 {  
    164.                     break;  
    165.                 }  
    166.                 totalBytesRead += bytesRead;  
    167.             }  
    168.             Array.Resize(ref data, totalBytesRead);  
    169.             return data;  
    170.         }  
    171.         catch  
    172.         {  
    173.             return null;  
    174.         }  
    175.     }  
    176. }  
posted @ 2015-02-04 08:53  Ranran  阅读(690)  评论(3编辑  收藏  举报