WCF大数据量传输解决方案

时间:2022-08-27 12:20:14

文章内容列表:
1. 场景:
2. 解决方案
3. WCF契约与服务实现设计静态图
4. WCF契约与服务实现设计详细说明
6. 服务端启动服务代码:
7. 客户端代码
8.   WCF大数据量传输解决方案源码下载

1. 场景:

WCF在网络传输中,大数据量传输造成网络阻塞,宽带无法承受;

2. 解决方案

解决WCF在网络传输中的大数据量问题:

A.需要把相关数据序列化成字节流,再对字节流进行压缩,再进行传输,到了客户端再做反向操作便可获得原始数据。

B.如果压缩后的数据仍然较大时,可以再压缩流后,再对流进行拆分即可。
WCF大数据量传输解决方案
                   (解决方案A图)
WCF大数据量传输解决方案
                     (解决方案2)

3. WCF契约与服务实现设计静态图
WCF大数据量传输解决方案
4. WCF契约与服务实现设计详细说明

契约接口详细说明
WCF大数据量传输解决方案
服务类详细说明
WCF大数据量传输解决方案

5. WCF契约与服务代码实现:
  契约代码

WCF大数据量传输解决方案
 1WCF大数据量传输解决方案using System;
 2WCF大数据量传输解决方案using System.Collections.Generic;
 3WCF大数据量传输解决方案using System.Linq;
 4WCF大数据量传输解决方案using System.Runtime.Serialization;
 5WCF大数据量传输解决方案using System.ServiceModel;
 6WCF大数据量传输解决方案using System.Text;
 7WCF大数据量传输解决方案///日期:2008-04-16
 8WCF大数据量传输解决方案///作者:旋风
 9WCF大数据量传输解决方案///来自:http://cnblogs.com/xuanfeng
10WCF大数据量传输解决方案namespace WCFDataTransfers
11WCF大数据量传输解决方案{
12WCF大数据量传输解决方案
13WCF大数据量传输解决方案    [ServiceContract(Namespace = "http://DataTransfers/Demao")]
14WCF大数据量传输解决方案    public interface IDataTransfers
15WCF大数据量传输解决方案    {  
16WCF大数据量传输解决方案        /// <summary>
17WCF大数据量传输解决方案        /// 获取所用压缩后字节流
18WCF大数据量传输解决方案        /// </summary>
19WCF大数据量传输解决方案        /// <returns></returns>
20WCF大数据量传输解决方案        [OperationContract]
21WCF大数据量传输解决方案        byte[] GetAllBuffer();
22WCF大数据量传输解决方案        /// <summary>
23WCF大数据量传输解决方案        /// 设置压缩后字节流分块,每一块的大小
24WCF大数据量传输解决方案        /// </summary>
25WCF大数据量传输解决方案        /// <param name="length"></param>
26WCF大数据量传输解决方案        [OperationContract]
27WCF大数据量传输解决方案        void SetBufferLength(int length);
28WCF大数据量传输解决方案        /// <summary>
29WCF大数据量传输解决方案        /// 读取压缩后字节流一块,并提升字节流的位置
30WCF大数据量传输解决方案        /// </summary>
31WCF大数据量传输解决方案        /// <returns></returns>
32WCF大数据量传输解决方案        [OperationContract]
33WCF大数据量传输解决方案        bool ReadNextBuffer();
34WCF大数据量传输解决方案        /// <summary>
35WCF大数据量传输解决方案        /// 获取当前块的字节流
36WCF大数据量传输解决方案        /// </summary>
37WCF大数据量传输解决方案        /// <returns></returns>
38WCF大数据量传输解决方案        [OperationContract]
39WCF大数据量传输解决方案        byte[] GetCurrentBuffer();       
40WCF大数据量传输解决方案
41WCF大数据量传输解决方案       
42WCF大数据量传输解决方案    }
43WCF大数据量传输解决方案
44WCF大数据量传输解决方案   
45WCF大数据量传输解决方案}
46WCF大数据量传输解决方案

实现契约服务代码

WCF大数据量传输解决方案
  1WCF大数据量传输解决方案using System;
  2WCF大数据量传输解决方案using System.Data;
  3WCF大数据量传输解决方案using System.Runtime.Serialization;
  4WCF大数据量传输解决方案using System.Runtime.Serialization.Formatters.Binary;
  5WCF大数据量传输解决方案using System.IO;
  6WCF大数据量传输解决方案using System.IO.Compression;
  7WCF大数据量传输解决方案using System.Collections.Generic;
  8WCF大数据量传输解决方案using System.Linq;
  9WCF大数据量传输解决方案using System.ServiceModel;
 10WCF大数据量传输解决方案using System.Text;
 11WCF大数据量传输解决方案///日期:2008-04-16
 12WCF大数据量传输解决方案///作者:旋风
 13WCF大数据量传输解决方案///来自:http://cnblogs.com/xuanfeng
 14WCF大数据量传输解决方案namespace WCFDataTransfers
 15WCF大数据量传输解决方案{
 16WCF大数据量传输解决方案    
 17WCF大数据量传输解决方案    public class DataTransfers :IDataTransfers
 18WCF大数据量传输解决方案    {
 19WCF大数据量传输解决方案        /// <summary>
 20WCF大数据量传输解决方案        /// 无参数构造函数
 21WCF大数据量传输解决方案        /// </summary>
 22WCF大数据量传输解决方案        public DataTransfers()
 23WCF大数据量传输解决方案        {
 24WCF大数据量传输解决方案
 25WCF大数据量传输解决方案            InitBuffers(InitTestDataSet());
 26WCF大数据量传输解决方案        }
 27WCF大数据量传输解决方案
 28WCF大数据量传输解决方案        private byte[] buffer_all = null;
 29WCF大数据量传输解决方案        private byte[] buffer_currect = null;
 30WCF大数据量传输解决方案        private int  get_buffer_length = 1000;
 31WCF大数据量传输解决方案        private long  remain_length;
 32WCF大数据量传输解决方案        private MemoryStream stream;
 33WCF大数据量传输解决方案        /// <summary>
 34WCF大数据量传输解决方案        /// 生成一个测试的数据集
 35WCF大数据量传输解决方案        /// </summary>
 36WCF大数据量传输解决方案        /// <returns></returns>
 37WCF大数据量传输解决方案        private DataSet InitTestDataSet()
 38WCF大数据量传输解决方案        {
 39WCF大数据量传输解决方案            DataSet ds = new DataSet("test");
 40WCF大数据量传输解决方案            DataTable table = new DataTable("test");
 41WCF大数据量传输解决方案            DataColumn column = new DataColumn("test");
 42WCF大数据量传输解决方案            column.DataType = Type.GetType("System.String");
 43WCF大数据量传输解决方案            table.Columns.Add(column);
 44WCF大数据量传输解决方案            DataRow row;
 45WCF大数据量传输解决方案            for (int i = 0; i < 100000;i++ )
 46WCF大数据量传输解决方案            {
 47WCF大数据量传输解决方案                row = table.NewRow();
 48WCF大数据量传输解决方案                row["test"] = "测试数据 !";
 49WCF大数据量传输解决方案                table.Rows.Add(row);
 50WCF大数据量传输解决方案            }
 51WCF大数据量传输解决方案
 52WCF大数据量传输解决方案            ds.Tables.Add(table);
 53WCF大数据量传输解决方案
 54WCF大数据量传输解决方案            return ds;
 55WCF大数据量传输解决方案        
 56WCF大数据量传输解决方案        }
 57WCF大数据量传输解决方案        /// <summary>
 58WCF大数据量传输解决方案        /// 初始化压缩字节流
 59WCF大数据量传输解决方案        /// </summary>
 60WCF大数据量传输解决方案        /// <param name="ds"></param>
 61WCF大数据量传输解决方案        private void InitBuffers(DataSet ds)
 62WCF大数据量传输解决方案        {
 63WCF大数据量传输解决方案            
 64WCF大数据量传输解决方案                IFormatter formatter = new BinaryFormatter();
 65WCF大数据量传输解决方案                MemoryStream stream_ = new MemoryStream();
 66WCF大数据量传输解决方案                formatter.Serialize(stream_, ds);
 67WCF大数据量传输解决方案                buffer_all = stream_.ToArray();
 68WCF大数据量传输解决方案                stream_.Close();
 69WCF大数据量传输解决方案                byte[] bytes_c = Compression(buffer_all, CompressionMode.Compress);
 70WCF大数据量传输解决方案                stream = new MemoryStream(bytes_c);
 71WCF大数据量传输解决方案                stream.Position = 0;
 72WCF大数据量传输解决方案                remain_length = stream.Length;
 73WCF大数据量传输解决方案
 74WCF大数据量传输解决方案            
 75WCF大数据量传输解决方案        }
 76WCF大数据量传输解决方案        /// <summary>
 77WCF大数据量传输解决方案        /// 提供内部使用压缩字流的方法
 78WCF大数据量传输解决方案        /// </summary>
 79WCF大数据量传输解决方案        /// <param name="data"></param>
 80WCF大数据量传输解决方案        /// <param name="mode"></param>
 81WCF大数据量传输解决方案        /// <returns></returns>
 82WCF大数据量传输解决方案        private  byte[] Compression(byte[] data, CompressionMode mode)
 83WCF大数据量传输解决方案        {
 84WCF大数据量传输解决方案            DeflateStream zip = null;
 85WCF大数据量传输解决方案            try
 86WCF大数据量传输解决方案            {
 87WCF大数据量传输解决方案                if (mode == CompressionMode.Compress)
 88WCF大数据量传输解决方案                {
 89WCF大数据量传输解决方案                    MemoryStream ms = new MemoryStream();
 90WCF大数据量传输解决方案                    zip = new DeflateStream(ms, mode, true);
 91WCF大数据量传输解决方案                    zip.Write(data, 0, data.Length);
 92WCF大数据量传输解决方案                    zip.Close();
 93WCF大数据量传输解决方案                    return ms.ToArray();
 94WCF大数据量传输解决方案                }
 95WCF大数据量传输解决方案                else
 96WCF大数据量传输解决方案                {
 97WCF大数据量传输解决方案                    MemoryStream ms = new MemoryStream();
 98WCF大数据量传输解决方案                    ms.Write(data, 0, data.Length);
 99WCF大数据量传输解决方案                    ms.Flush();
100WCF大数据量传输解决方案                    ms.Position = 0;
101WCF大数据量传输解决方案                    zip = new DeflateStream(ms, mode, true);
102WCF大数据量传输解决方案                    MemoryStream os = new MemoryStream();
103WCF大数据量传输解决方案                    int SIZE = 1024;
104WCF大数据量传输解决方案                    byte[] buf = new byte[SIZE];
105WCF大数据量传输解决方案                    int l = 0;
106WCF大数据量传输解决方案                    do
107WCF大数据量传输解决方案                    {
108WCF大数据量传输解决方案                        l = zip.Read(buf, 0, SIZE);
109WCF大数据量传输解决方案                        if (l == 0) l = zip.Read(buf, 0, SIZE);
110WCF大数据量传输解决方案                        os.Write(buf, 0, l);
111WCF大数据量传输解决方案                    } while (l != 0);
112WCF大数据量传输解决方案                    zip.Close();
113WCF大数据量传输解决方案                    return os.ToArray();
114WCF大数据量传输解决方案                }
115WCF大数据量传输解决方案            }
116WCF大数据量传输解决方案            catch
117WCF大数据量传输解决方案            {
118WCF大数据量传输解决方案                if (zip != null) zip.Close();
119WCF大数据量传输解决方案                return null;
120WCF大数据量传输解决方案            }
121WCF大数据量传输解决方案            finally
122WCF大数据量传输解决方案            {
123WCF大数据量传输解决方案                if (zip != null) zip.Close();
124WCF大数据量传输解决方案            }
125WCF大数据量传输解决方案        }
126WCF大数据量传输解决方案
127WCF大数据量传输解决方案        #region IDataTransfers 成员
128WCF大数据量传输解决方案        /// <summary>
129WCF大数据量传输解决方案        /// 获取所有字节流
130WCF大数据量传输解决方案        /// </summary>
131WCF大数据量传输解决方案        /// <returns></returns>
132WCF大数据量传输解决方案        public byte[] GetAllBuffer()
133WCF大数据量传输解决方案        {
134WCF大数据量传输解决方案            if (buffer_all != null)
135WCF大数据量传输解决方案                return buffer_all;
136WCF大数据量传输解决方案            else return null;
137WCF大数据量传输解决方案        }
138WCF大数据量传输解决方案        /// <summary>
139WCF大数据量传输解决方案        /// 设置压缩后字节流分块,每一块的大小
140WCF大数据量传输解决方案        /// </summary>
141WCF大数据量传输解决方案        /// <param name="length"></param>
142WCF大数据量传输解决方案        public void SetBufferLength(int length)
143WCF大数据量传输解决方案        {
144WCF大数据量传输解决方案           this.get_buffer_length=length;
145WCF大数据量传输解决方案        }
146WCF大数据量传输解决方案        /// <summary>
147WCF大数据量传输解决方案        /// 读取压缩后字节流一块,并提升字节流的位置
148WCF大数据量传输解决方案        /// </summary>
149WCF大数据量传输解决方案        /// <returns></returns>
150WCF大数据量传输解决方案        public bool ReadNextBuffer()
151WCF大数据量传输解决方案        {
152WCF大数据量传输解决方案            bool bo;
153WCF大数据量传输解决方案            if (remain_length > 0)
154WCF大数据量传输解决方案            {
155WCF大数据量传输解决方案                if (remain_length> get_buffer_length)
156WCF大数据量传输解决方案                {
157WCF大数据量传输解决方案                    buffer_currect = new byte[get_buffer_length];
158WCF大数据量传输解决方案
159WCF大数据量传输解决方案                    stream.Read(buffer_currect, 0, get_buffer_length);
160WCF大数据量传输解决方案                    remain_length -= get_buffer_length;
161WCF大数据量传输解决方案                }
162WCF大数据量传输解决方案                else
163WCF大数据量传输解决方案                {
164WCF大数据量传输解决方案                    buffer_currect = new byte[remain_length];
165WCF大数据量传输解决方案                    stream.Read(buffer_currect, 0, (int)remain_length);
166WCF大数据量传输解决方案                    remain_length = 0;
167WCF大数据量传输解决方案                }
168WCF大数据量传输解决方案
169WCF大数据量传输解决方案                bo = true;
170WCF大数据量传输解决方案            }
171WCF大数据量传输解决方案            else
172WCF大数据量传输解决方案                bo = false;
173WCF大数据量传输解决方案            return bo;
174WCF大数据量传输解决方案           
175WCF大数据量传输解决方案        }
176WCF大数据量传输解决方案        /// <summary>
177WCF大数据量传输解决方案        /// 获取当前块的字节流
178WCF大数据量传输解决方案        /// </summary>
179WCF大数据量传输解决方案        /// <returns></returns>
180WCF大数据量传输解决方案        public byte[] GetCurrentBuffer()
181WCF大数据量传输解决方案        {
182WCF大数据量传输解决方案            if (buffer_currect != null)
183WCF大数据量传输解决方案                return buffer_currect;
184WCF大数据量传输解决方案            else
185WCF大数据量传输解决方案                return null;
186WCF大数据量传输解决方案
187WCF大数据量传输解决方案        }
188WCF大数据量传输解决方案
189WCF大数据量传输解决方案        #endregion
190WCF大数据量传输解决方案    }
191WCF大数据量传输解决方案}
192WCF大数据量传输解决方案

6. 服务端启动服务代码:

WCF大数据量传输解决方案static void Main(string[] args)
WCF大数据量传输解决方案        {
WCF大数据量传输解决方案            ServiceHost host = new ServiceHost(typeof(DataTransfers));
WCF大数据量传输解决方案            Console.Write("服务中WCF大数据量传输解决方案WCF大数据量传输解决方案");
WCF大数据量传输解决方案            Console.Read();
WCF大数据量传输解决方案            Console.Read();
WCF大数据量传输解决方案        }

7. 客户端代码

WCF大数据量传输解决方案
 1WCF大数据量传输解决方案 //实例化WCF客户端
 2WCF大数据量传输解决方案            DataTransfersClient client = new DataTransfersClient();
 3WCF大数据量传输解决方案            MemoryStream stream = new MemoryStream();
 4WCF大数据量传输解决方案            byte[] buffer;
 5WCF大数据量传输解决方案            //获取所用块压缩流,并组装
 6WCF大数据量传输解决方案            while(client.ReadNextBuffer()) 
 7WCF大数据量传输解决方案            {
 8WCF大数据量传输解决方案                buffer = client.GetCurrentBuffer();
 9WCF大数据量传输解决方案                stream.Write(buffer,0,buffer.Length);
10WCF大数据量传输解决方案            }
11WCF大数据量传输解决方案            stream.Position = 0;
12WCF大数据量传输解决方案            buffer= new byte[stream.Length] ;
13WCF大数据量传输解决方案            stream.Read(buffer,0,buffer.Length);
14WCF大数据量传输解决方案            stream.Close();
15WCF大数据量传输解决方案            //解压压缩流
16WCF大数据量传输解决方案            byte[] bytes = Compression(buffer,CompressionMode.Decompress);
17WCF大数据量传输解决方案            stream = new MemoryStream(bytes);
18WCF大数据量传输解决方案            IFormatter formatter = new BinaryFormatter();
19WCF大数据量传输解决方案            //反序列化
20WCF大数据量传输解决方案            DataSet ds=(DataSet) formatter.Deserialize(stream);
21WCF大数据量传输解决方案            stream.Close();
22WCF大数据量传输解决方案            this.dataGridView1.DataSource = ds;
23WCF大数据量传输解决方案            this.dataGridView1.DataMember="test";
24WCF大数据量传输解决方案            this.label1.Text = ds.Tables[0].Rows.Count.ToString();
25WCF大数据量传输解决方案            client.Close();

8.
   WCF大数据量传输解决方案源码下载

WCF大数据量传输解决方案的更多相关文章

  1. 解决WCF大数据量传输 ,System&period;Net&period;Sockets&period;SocketException&colon; 远程主机强迫关闭了一个现有的连接

    开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决 ...

  2. WCF大数据量传输配置

    WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMessageSize:获取或设置配置了此绑定 ...

  3. 大数据量传输时配置WCF的注意事项

    原文:大数据量传输时配置WCF的注意事项 WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMe ...

  4. 【转载】大数据量传输时配置WCF的注意事项

    WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMessageSize:获取或设置配置了此绑定 ...

  5. &lbrack;转&rsqb;POI大数据量Excel解决方案

    全文转载自:jinshuaiwang的博客 目前处理Excel的开源javaAPI主要有两种,一是Jxl(Java Excel API),Jxl只支持Excel2003以下的版本.另外一种是Apach ...

  6. 关于webservice大数据量传输时的压缩和解压缩

    当访问WebSerivice时,如果数据量很大,传输数据时就会很慢.为了提高速度,我们就会想到对数据进行压缩.首先我们来分析一下. 当在webserice中传输数据时,一般都采用Dataset进行数据 ...

  7. WCF 客户端解决大数据量传输配置

    1. 服务端返回数据给客户端报错 在客户端配置文件中,主要是配置maxReceivedMessageSize <system.serviceModel> <bindings> ...

  8. &period;NET 大数据量并发解决方案

    https://www.cnblogs.com/wxlevel/p/7484738.html

  9. wcf传输Dataset大数据量 -压缩(一)

    wcf传输Dataset大数据量 -压缩(一) 由于WCF不能传输DataTable(不能序列化),所以更多项目中都会使用DataSet作为查询集合的首选返回类型,但是由于DataSet会生成很多的状 ...

随机推荐

  1. iOS-私有API与runtime

    转载:http://www.jianshu.com/p/6167b9ce7af8 序 有朋友在做类似iTool的功能,跟我聊起来,这几天闲,就写了一个demo,不是正经做这个,还很粗略,具体干货诸位等 ...

  2. AC小笔记

    1:基本库函数的使用 Rand()函数,可以产生0~32767之间的随机数. a+rand()%(b-a)  可以得到 [a,b] 之间的随机数. 2:基本数据类型的使用 可以使用强制类型转换 例如: ...

  3. &period;net程序员转行做手游开发经历(五)

    大家好,真的是好长时间都没有更新博客了.上来博客园发现很多朋友还在关注我们,那给大家汇报下最近的一些进展. 收费版上线了,但是下载量不是很多,刚发布的时候下载每天的下载还是挺多,我们几个小伙伴在论坛. ...

  4. CentOS下源码安装mplayer播放器

    http://www.mplayerhq.hu/MPlayer/releases/ [root@ok MPlayer-1.2.1]# pwd /root/MPlayer-1.2.1 http://ww ...

  5. 重温 Win32 API ----- 截屏指定窗体并打印

    朋友说在一个VC++6.0开发的项目中要增加打印窗体的功能,让帮忙写个代码供其调用. 这么老的IDE当然不想碰了,并且也不喜欢MFC笨拙不清晰的封装.所以决定採用纯Win32 API,然后用C++类简 ...

  6. windows已安装solr

    下载地址:http://archive.apache.org/dist/lucene/solr/ 操作环境:  Win7,Tomcat6, Solr4.3, Jdk6 下载solr4.3的包,解压到本 ...

  7. 今天学习的裸板驱动之GPIO实验学习心得

    GPIO分成很多组今天学习的这个芯片的GPIO有GPA-GPJ个组.具体可在芯片手册中看到. GPIO有很多寄存器,今天学习的这个芯片,他的寄存器分为以下几种类型: (1)端口控制寄存器 (2)端口数 ...

  8. 如何解决WebBrowser&period;DocumentCompleted事件的多次调用

    转载:https://www.cnblogs.com/rchlz/archive/2009/02/27/1399274.html 关于DocumentCompleted事件,MSDN给出的解释是在文档 ...

  9. Hadoop hbase集群断电数据块被破坏无法启动

    集群机器意外断电重启,导致hbase 无法正常启动,抛出reflect invocation异常,可能是正在执行的插入或合并等操作进行到一半时中断,导致部分数据文件不完整格式不正确或在hdfs上blo ...

  10. 4A - 排序

    输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数 ...