文章内容列表:
1. 场景:
2. 解决方案
3. WCF契约与服务实现设计静态图
4. WCF契约与服务实现设计详细说明
6. 服务端启动服务代码:
7. 客户端代码
8. WCF大数据量传输解决方案源码下载
1. 场景:
WCF在网络传输中,大数据量传输造成网络阻塞,宽带无法承受;
2. 解决方案
解决WCF在网络传输中的大数据量问题:
A.需要把相关数据序列化成字节流,再对字节流进行压缩,再进行传输,到了客户端再做反向操作便可获得原始数据。
B.如果压缩后的数据仍然较大时,可以再压缩流后,再对流进行拆分即可。
3. WCF契约与服务实现设计静态图
4. WCF契约与服务实现设计详细说明
5. WCF契约与服务代码实现:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- using System.Text;
- ///日期:2008-04-16
- ///作者:旋风
- ///来自:http://cnblogs.com/xuanfeng
- namespace WCFDataTransfers
- {
- [ServiceContract(Namespace = "http://DataTransfers/Demao")]
- public interface IDataTransfers
- {
- /// <summary>
- /// 获取所用压缩后字节流
- /// </summary>
- /// <returns></returns>
- [OperationContract]
- byte[] GetAllBuffer();
- /// <summary>
- /// 设置压缩后字节流分块,每一块的大小
- /// </summary>
- /// <param name="length"></param>
- [OperationContract]
- void SetBufferLength(int length);
- /// <summary>
- /// 读取压缩后字节流一块,并提升字节流的位置
- /// </summary>
- /// <returns></returns>
- [OperationContract]
- bool ReadNextBuffer();
- /// <summary>
- /// 获取当前块的字节流
- /// </summary>
- /// <returns></returns>
- [OperationContract]
- byte[] GetCurrentBuffer();
- }
- }
- using System;
- using System.Data;
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.IO;
- using System.IO.Compression;
- using System.Collections.Generic;
- using System.Linq;
- using System.ServiceModel;
- using System.Text;
- ///日期:2008-04-16
- ///作者:旋风
- ///来自:http://cnblogs.com/xuanfeng
- namespace WCFDataTransfers
- {
- public class DataTransfers :IDataTransfers
- {
- /// <summary>
- /// 无参数构造函数
- /// </summary>
- public DataTransfers()
- {
- InitBuffers(InitTestDataSet());
- }
- private byte[] buffer_all = null;
- private byte[] buffer_currect = null;
- private int get_buffer_length = 1000;
- private long remain_length;
- private MemoryStream stream;
- /// <summary>
- /// 生成一个测试的数据集
- /// </summary>
- /// <returns></returns>
- private DataSet InitTestDataSet()
- {
- DataSet ds = new DataSet("test");
- DataTable table = new DataTable("test");
- DataColumn column = new DataColumn("test");
- column.DataType = Type.GetType("System.String");
- table.Columns.Add(column);
- DataRow row;
- for (int i = 0; i < 100000;i++ )
- {
- row = table.NewRow();
- row["test"] = "测试数据 !";
- table.Rows.Add(row);
- }
- ds.Tables.Add(table);
- return ds;
- }
- /// <summary>
- /// 初始化压缩字节流
- /// </summary>
- /// <param name="ds"></param>
- private void InitBuffers(DataSet ds)
- {
- IFormatter formatter = new BinaryFormatter();
- MemoryStream stream_ = new MemoryStream();
- formatter.Serialize(stream_, ds);
- buffer_all = stream_.ToArray();
- stream_.Close();
- byte[] bytes_c = Compression(buffer_all, CompressionMode.Compress);
- stream = new MemoryStream(bytes_c);
- stream.Position = 0;
- remain_length = stream.Length;
- }
- /// <summary>
- /// 提供内部使用压缩字流的方法
- /// </summary>
- /// <param name="data"></param>
- /// <param name="mode"></param>
- /// <returns></returns>
- 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();
- }
- }
- #region IDataTransfers 成员
- /// <summary>
- /// 获取所有字节流
- /// </summary>
- /// <returns></returns>
- public byte[] GetAllBuffer()
- {
- if (buffer_all != null)
- return buffer_all;
- else return null;
- }
- /// <summary>
- /// 设置压缩后字节流分块,每一块的大小
- /// </summary>
- /// <param name="length"></param>
- public void SetBufferLength(int length)
- {
- this.get_buffer_length=length;
- }
- /// <summary>
- /// 读取压缩后字节流一块,并提升字节流的位置
- /// </summary>
- /// <returns></returns>
- public bool ReadNextBuffer()
- {
- bool bo;
- if (remain_length > 0)
- {
- if (remain_length> get_buffer_length)
- {
- buffer_currect = new byte[get_buffer_length];
- stream.Read(buffer_currect, 0, get_buffer_length);
- remain_length -= get_buffer_length;
- }
- else
- {
- buffer_currect = new byte[remain_length];
- stream.Read(buffer_currect, 0, (int)remain_length);
- remain_length = 0;
- }
- bo = true;
- }
- else
- bo = false;
- return bo;
- }
- /// <summary>
- /// 获取当前块的字节流
- /// </summary>
- /// <returns></returns>
- public byte[] GetCurrentBuffer()
- {
- if (buffer_currect != null)
- return buffer_currect;
- else
- return null;
- }
- #endregion
- }
- }
6. 服务端启动服务代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.ServiceModel;
- ///日期:2008-04-16
- ///作者:旋风
- ///来自:http://cnblogs.com/xuanfeng
- namespace WCFDataTransfers
- {
- class RunServies
- {
- static void Main(string[] args)
- {
- ServiceHost host = new ServiceHost(typeof(DataTransfers));
- Console.Write("服务中......");
- Console.Read();
- Console.Read();
- }
- }
- }
7. 客户端代码
- //实例化WCF客户端
- DataTransfersClient client = new DataTransfersClient();
- MemoryStream stream = new MemoryStream();
- byte[] buffer;
- //获取所用块压缩流,并组装
- while(client.ReadNextBuffer())
- {
- buffer = client.GetCurrentBuffer();
- 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();
- }
- }
相关推荐
在处理大数据量传输时,由于网络带宽限制和性能考虑,通常需要采取特殊策略。本文将深入探讨如何在WCF中实现大数据量的高效传输,特别是涉及到数据的压缩和分段传输。 首先,让我们了解大数据量在WCF中的挑战。当...
在压缩包文件“WCF大数据量传输解决方案”中,可能包含了具体的代码示例和配置文件,用于演示如何实现上述策略。你可以根据这些资源进行实际操作,以适应项目需求。通过调整WCF配置和采用适当的传输策略,可以有效地...
**高性能的WCF解决方案** Windows Communication Foundation (WCF) 是微软提供的一种面向服务的通信框架,用于构建可互操作的、安全的、可靠的企业级应用程序。在本文中,我们将深入探讨如何优化WCF服务,以实现更...
在构建高性能的Windows ...总的来说,设计高性能的WCF解决方案需要全面考虑传输层、序列化、编码器的选择,以及客户端和服务端的优化策略。通过细致的架构设计和代码优化,我们可以构建出既高效又灵活的分布式系统。
文章内容包括: windows form (窗体) 之间传值小结 ;...WCF传输大数据的三种解决方案:WCF传输大数据量DataSet ,在WCF中分页传输数据(Duplex方式),序列化传输; WCF消息回调与心跳包的解决方案
WebAPI更专注于RESTful服务,而ASP.NET Core提供了更现代、轻量级的跨平台解决方案。 在本系列课程的webcast中,您将逐步学习这些概念,并通过实践案例加深理解。通过学习,您将能够利用WCF构建高效、可靠的企业级...
对于大数据量传输,WCF提供流传输模式,允许数据分块传输,降低内存消耗。同时,可以通过设置最大消息大小、缓冲区大小等配置参数来优化性能。 6. **WCF标签** - **WCF**: 代表Windows Communication Foundation,...
3. **监控程序**:这是一个完整的监控解决方案,包括数据采集(摄像头和桌面)、数据传输(通过WCF)以及客户端的展示和控制。 综合以上信息,我们可以深入探讨WCF在视频监控中的应用,以及可能涉及的技术点: 1. ...
压缩包中的`HostTcpTest.sln`是一个Visual Studio解决方案,包含服务端(Host)和客户端(Client)项目。以下是对这两个项目的简要介绍: 1. **HostTcpTest** - 这是服务端项目,负责定义和暴露WCF服务。开发者通常...
8. **WorthSDN**:标签中的"WorthSDN"可能是某种特定的解决方案或框架,它可能提供了简化WCF文件上传和下载的工具,使得开发者能够更方便地实现上述功能。 通过深入理解WCF的工作原理,结合上述策略,我们可以构建...
通过研究这个解决方案,你可以深入了解WCF REST服务的完整工作流程,以及如何在实际项目中部署和使用它们。 学习和掌握WCF REST的实现,不仅有助于理解服务端开发,还能提高你在分布式系统设计和Web服务交互方面的...
- **高可用性和可扩展性**:通过支持集群和负载均衡,WCF能够处理大量并发请求和大数据量处理需求。 #### 三、WCF 与 SOA 的关系 WCF 作为一种技术平台,为实现SOA架构提供了强有力的支持。具体来说: - **服务端...
- **BufferSize**: 调整WCF绑定的缓冲区大小,以控制每次传输的数据量,减少内存压力。 - **MaxReceivedMessageSize**: 在服务配置中设置这个值,限制接收消息的最大大小,防止恶意大文件攻击。 - **TransferMode*...
本文研究了基于WCF与P2P技术的大规模考试平台的实现原理,涉及了分布式系统、网络通信、服务扩展性等多个方面,为开发大规模考试平台提供了一种新的解决方案。 首先,文章提到了大规模考试平台在设计上面临的主要...
WCF是微软对先前分布式技术如ASP.NET Web Services、Remoting和Message Queuing (MSMQ)的整合与升级,旨在提供一种更加灵活、安全和高性能的解决方案。 #### 第四节 学习WCF的资源 学习WCF可以参考微软官方文档、...
**WCF即时通讯详解** Windows Communication Foundation (WCF) 是微软.NET ...它涉及到服务端和客户端的设计、消息传输、安全性和数据库集成等多个方面,是.NET开发人员构建企业级即时通讯解决方案的重要工具。
- **面向连接**:如TCP,保持客户端和服务之间的连接,适合大数据量传输。 - **面向无连接**:如HTTP,适合少量数据和低带宽场景。 ### 5. 安全性 WCF提供了多种安全机制: - **身份验证**:支持基本、digest、...
通过打开并编译这个解决方案,可以启动WCF服务,并测试返回JSON格式数据的功能。 总之,创建一个返回JSON的WCF服务涉及定义服务接口,实现服务逻辑,配置服务行为和终结点,以及正确引用和使用JSON序列化库。通过...
- **解决方案**: - 明确指定版本号。 - 使用`KnownType`属性。 #### 二十、枚举类型 - **定义**:枚举类型是在WCF中使用的预定义类型。 - **使用**: - 在服务契约中声明。 - 作为参数传递。 #### 二十一、...