`
sty2008boy
  • 浏览: 301284 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

WCF大数据传输1

 
阅读更多

第一步:创建“WCF服务库”
“文件(F)”->“新建项目(P)...”打开新建项目对话框。在左侧的“项目类型”中选择“WCF”,然后再在右侧的“模板”中选择“WCF服务库”。
在下面的“名称”文本框中,填写我们要创建的WCF服务库的项目名称“Wcf_MassData”。 
点击确定,会创建出我们的WCF服务库项目,在解决方案中会自动为我们生成两个类文件“IService.cs”和“Service.cs”。这两个类文件是两个WCF示例文件,对我们开发没有什么用处,现在我们删掉这两个文件。



第二步:创建DataTransfers与IDataTransfers服务接口类
在“解决方案窗口”中,我们右击Services项目名,选择“添加”,再单击“类”,在弹出的“添加新项”窗口中,选择“类”,并在“名称”文本框中写入项名称“IDataTransfers.cs”和“DataTransfers.cs”。


第三步:为服务接口类编写代码

IDataTransfers.cs代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace Wcf_MassData
{
        [ServiceContract]
        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();

            
        }

}


 DataTransfers.cs代码:

 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;

namespace Wcf_MassData
{
        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 < 10000; i++)
                        {
                                row = table.NewRow();
                                row["test"] = "测试数据 "+(i+1);
                                table.Rows.Add(row);
                        }

                        ds.Tables.Add(table);

                        return ds;

                }
                /// <summary>
                /// 初始化压缩字节流
                /// </summary>
                /// <param name="ds"></param>
                private byte[] 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;
                        return bytes_c;


                }
                /// <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();
                        }
                }

IDataTransfers 成员#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;

                        


                        DataSet ds = InitTestDataSet();
                        byte[] b = InitBuffers(ds);
                        return b;
                }

             
                #endregion
        }
}

 

 

分享到:
评论

相关推荐

    Wcf 大数据量传输源码

    双通道服务允许服务端主动向客户端推送数据,这在大数据传输中非常有用,因为服务端可以控制数据的发送速率,避免客户端一次性接收大量数据导致内存压力。 总结来说,处理WCF中的大数据量传输需要综合运用批量处理...

    WCF 数据压缩传输

    总的来说,WCF数据压缩传输是一种有效优化通信效率的技术,尤其在处理大数据量和低带宽环境时。通过自定义编码器,我们可以轻松地将这一功能整合到WCF服务中,但同时也要注意潜在的性能和安全影响。

    wcf大数据量传输(客户段->服务段 服务段->客户段)

    本文将深入探讨如何在WCF中实现大数据量的高效传输,特别是涉及到数据的压缩和分段传输。 首先,让我们了解大数据量在WCF中的挑战。当发送或接收大数据对象,如Dataset,时,可能会导致性能下降、内存压力增大以及...

    WCF大型数据和流\详解传输\安全性概述

    在WCF中,处理大数据量时,直接将整个数据对象加载到内存可能会导致性能问题和资源消耗过大。因此,WCF引入了流传输模式,允许数据以流的形式进行处理,而不是一次性加载所有数据。流模式通过减少内存占用和提高传输...

    WCF匿名客户端加密传输数据

    2. 使用HTTPS协议和Transport安全模式,启用SSL/TLS以保证数据传输的安全性。 3. 配置X.509证书以增强服务认证和数据加密。 4. 对于“WCFX509-原始”和“WCFX509-加密”这两个示例,可以研究它们在配置上的差异,...

    WCF 元数据 查询器 WCF 元数据 分析器

    2. 检查数据契约:验证数据类型是否正确序列化和反序列化,确保跨网络的数据传输不会出现问题。 3. 识别兼容性问题:如果服务升级,分析器可以帮助确定新版本是否与现有客户端兼容。 4. 性能评估:通过元数据分析,...

    WCF 元数据浏览器 WCF 元数据浏览器

    总之,WCF元数据浏览器是WCF开发过程中不可或缺的工具,它极大地促进了服务的可发现性和互操作性,提高了开发效率。正确理解和使用这个工具,对于理解WCF服务的工作原理和服务之间的通信方式至关重要。

    Wcf传输大数据

    本文将深入探讨Wcf在处理大数据传输时的挑战、解决方案以及相关的代码实现。 首先,我们要理解WCF传输大数据时面临的问题。默认情况下,WCF使用SOAP协议,这是一种重量级的消息格式,包含大量头部信息,这在传输...

    WCF大数据量传输解决方案

    WCF在网络传输中,大数据量传输造成网络阻塞,宽带无法承受; 2. 解决方案 解决WCF在网络传输中的大数据量问题: A. 需要把相关数据序列化成字节流,再对字节流进行压缩,再进行传输,到了客户端再做反向操作便可...

    wcf分块传输大文件的例子

    在处理大文件传输时,WCF 提供了一种分块传输机制,以解决一次性传输大文件可能导致的性能问题和网络拥塞。本示例将探讨如何在 WCF 中实现大文件的分块传输。 在传统的文件传输中,如果文件过大,一次性传输可能会...

    10学习WCF大型数据和流

    使用WCF诊断工具,如消息日志、性能计数器和跟踪,可以帮助定位和解决大型数据传输中的问题。 ### 10. 示例代码 教程中的“11_大型数据和流”可能是实际的代码示例,展示了如何在C#中使用VS2008实现WCF服务,处理...

    WPF+WCF画板聊天程序

    在本聊天程序中,WCF很可能作为后台服务,处理客户端的连接、数据传输和消息路由,确保用户之间能即时发送和接收画板操作和聊天信息。 【画板】部分是程序的核心功能之一,它允许用户通过鼠标或其他输入设备在屏幕...

    WCF压缩传输

    在这个“WCF压缩传输”的案例中,我们重点关注的是如何在WCF服务中实现数据传输的压缩,以提高网络效率并减少带宽消耗。 **为什么要进行WCF传输压缩?** 在互联网环境中,数据传输的速度受到网络带宽的限制。当传输...

    WCF编程系列之wcf使用压缩提高传输数据性能的方法

    WCF编程系列之wcf使用压缩提高传输数据性能的方法

    WCF Stream 传输

    本示例主要关注的是WCF中的Stream传输模式,这是一种高效的数据传输方式,特别适用于处理大容量数据,如文件上传或下载。 Stream传输模式在WCF中允许数据以流的形式进行处理,而不是一次性加载到内存中。这种方式...

    WCF加密传输数据,b并且用户名+密码验证

    标题中的"加密传输数据"是指在WCF通信过程中确保数据的保密性,防止未经授权的第三方窃取或篡改信息。这通常通过使用SSL/TLS协议来实现,该协议可以为网络通信提供端到端的安全保障,包括数据加密、服务器身份验证和...

    C#WCF和HTTP文件传输练习.zip

    为了实现流传输,我们可以使用WCF的`Stream`类型参数,这可以有效地处理大文件,因为数据不是一次性加载到内存中,而是按需读取和发送。 接下来,客户端部分。在本项目中,客户端程序选用Windows Presentation ...

    WCF数据压缩传送

    在WCF中,数据传输是通过消息传递完成的,而这些消息可能包含大量数据,尤其在处理大数据量或者远程通信时,数据传输效率和网络带宽的利用就成了关注的重点。为了优化这种状况,WCF提供了数据压缩的功能,使得数据在...

    wcf 数据压缩技术dome

    在.NET框架中,Windows Communication Foundation (WCF) 是一种用于构建分布式应用程序的强大工具,它提供了丰富的功能,包括数据传输、安全、事务等。在某些情况下,为了提高网络传输效率和减少带宽消耗,我们可能...

    Silverlight + WCF 数据压缩

    在网络通信中,如果数据量大,传输时间会显著增加,特别是在低带宽环境下。因此,压缩数据可以提高传输效率,降低延迟,提升用户体验。Silverlight与WCF结合使用时,可以通过压缩数据来优化性能,特别是对于大量数据...

Global site tag (gtag.js) - Google Analytics