六:创建WCF客户端程序
新建一个WinForm项目WCF_WinformCient:
右击项目名称,选择“添加服务引用...”


app.config:
app.config代码:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
        <system.serviceModel>
                <bindings>
                        <basicHttpBinding>
                                <binding name="BasicHttpBinding_IDataTransfers" closeTimeout="00:01:00"
                                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                                        maxBufferSize="65536000" maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000"
                                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                                        useDefaultWebProxy="true">
                                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="163840000"
                                                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                                        <security mode="None">
                                                <transport clientCredentialType="None" proxyCredentialType="None"
                                                        realm="" />
                                                <message clientCredentialType="UserName" algorithmSuite="Default" />
                                        </security>
                                </binding>
                        </basicHttpBinding>
                </bindings>
                <client>
                        <endpoint address="http://localhost/WCFMassData/Service.svc/basic"
                                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDataTransfers"
                                contract="WS.IDataTransfers" name="BasicHttpBinding_IDataTransfers" />
                </client>
        </system.serviceModel>
</configuration>

最后添加form1窗体:
form1.cs:
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.ComponentModel;

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WCF_WinformCient
{
        public partial class Form1 : Form
        {
                public Form1()
                {
                        InitializeComponent();
                }
                private void Form1_Load(object sender, EventArgs e)
                {
                        //实例化WCF客户端
                        
                        WS.DataTransfersClient client = new WS.DataTransfersClient("BasicHttpBinding_IDataTransfers");
                    
                        MemoryStream stream = new MemoryStream();
                        byte[] buffer;
                        //获取所用块压缩流,并组装
                        buffer = client.GetCurrentBuffer();

                        //while (client.ReadNextBuffer())
                        stream.Write(buffer,0,buffer.Length);
                        stream.Position = 0;
                        buffer = new byte[stream.Length];
                        stream.Read(buffer,0,buffer.Length);
                        stream.Close();
                        //解压压缩流
                        byte[] bytes = Compression(buffer, CompressionMode.Decompress);
                        stream = new MemoryStream(bytes);
                        IFormatter formatter = new BinaryFormatter();
                        //反序列化
                        DataSet ds = (DataSet)formatter.Deserialize(stream);
                        stream.Close();
                        this.dataGridView1.DataSource = ds;
                        this.dataGridView1.DataMember = "test";
                        this.label1.Text = ds.Tables[0].Rows.Count.ToString();
                        client.Close();



                }
                private byte[] Compression(byte[] data, CompressionMode mode)
                {
                        DeflateStream zip = null;
                        try
                        {
                                if (mode == CompressionMode.Compress)
                                {
                                        MemoryStream ms = new MemoryStream();
                                        zip = new DeflateStream(ms, mode, true);
                                        zip.Write(data, 0, data.Length);
                                        zip.Close();
                                        return ms.ToArray();
                                }
                                else
                                {
                                        MemoryStream ms = new MemoryStream();
                                        ms.Write(data, 0, data.Length);
                                        ms.Flush();
                                        ms.Position = 0;
                                        zip = new DeflateStream(ms, mode, true);
                                        MemoryStream os = new MemoryStream();
                                        int SIZE = 1024;
                                        byte[] buf = new byte[SIZE];
                                        int l = 0;
                                        do
                                        {
                                                l = zip.Read(buf, 0, SIZE);
                                                if (l == 0) l = zip.Read(buf, 0, SIZE);
                                                os.Write(buf, 0, l);
                                        } while (l != 0);
                                        zip.Close();
                                        return os.ToArray();
                                }
                        }
                        catch
                        {
                                if (zip != null) zip.Close();
                                return null;
                        }
                        finally
                        {
                                if (zip != null) zip.Close();
                        }
                }
        }
}