基于WCF的通道网络传输数据压缩技术的应用研究
2009-02-17 00:09
375 查看
本文及程序不是介绍WCF怎么用,而是研究如何在WCF通信时的通道两端自动进行数据压缩和解压缩,从而增加分布式数据传输速度。
而且,这个过程是完全透明的,用户及编程人员根本不需要知道它的存在,相当于HOOK在两端的一个组件。可以使用中网络带宽较小
的网络环境中。当WCF在两个实体间通讯的时候,便自动创建一个信息通道转接通讯,这个消息包含数据请求和相应。WCF使用特殊的
编码器将请求和响应数据转换成一系列的字节。
我所带的项目里遇到大文件分布式传输问题,经过分析考虑采用WCF通道压缩技术来解决此问题。执行这样的编码是需要传输大文件
(XML格式)由一台机器到另一台机器传输,而连接有速度限制。经过查看了一些国外英文网站,发现我不用写一个特殊的函数边压缩
和边解压,而是配置传输通道可以做到这一点,这种方式压缩可重复使用的任何契约。我发现自己编写的消息编码器是最简单的方式来
实现功能,真正的问题是如何编写信息编码器,在MSDN上没有找到任何关于此应用的实例。消息契约编码器的想法是Hook连接两端发送
和接收信息的渠道。程序是采用Microsoft Visual Studio 2008 WCF设计。
Code
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint
address="net.tcp://localhost:1234/MyService"
binding="customBinding"
bindingConfiguration="compactBinding"
contract="Client.IMyService" />
</client>
<!-- Defines a new customBinding that contains the compactMessageEncoding -->
<bindings>
<customBinding>
<binding name="compactBinding">
<compactMessageEncoding>
<binaryMessageEncoding/>
</compactMessageEncoding>
<tcpTransport />
</binding>
</customBinding>
</bindings>
<!-- Adds the extension dll so the WCF can find the compactMessageEncoding -->
<extensions>
<bindingElementExtensions>
<add name="compactMessageEncoding" type="Amib.WCF.CompactMessageEncodingElement, CompactMessageEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bindingElementExtensions>
</extensions>
</system.serviceModel>
</configuration>
这种压缩方法,消息堵塞的几率很小。使用CompactMessageEncoder在同一台机器运行客户端和服务器上可能会降低效率。
源码下载:CompactMessageEncoder_src.zip (886.97 kb)
而且,这个过程是完全透明的,用户及编程人员根本不需要知道它的存在,相当于HOOK在两端的一个组件。可以使用中网络带宽较小
的网络环境中。当WCF在两个实体间通讯的时候,便自动创建一个信息通道转接通讯,这个消息包含数据请求和相应。WCF使用特殊的
编码器将请求和响应数据转换成一系列的字节。
我所带的项目里遇到大文件分布式传输问题,经过分析考虑采用WCF通道压缩技术来解决此问题。执行这样的编码是需要传输大文件
(XML格式)由一台机器到另一台机器传输,而连接有速度限制。经过查看了一些国外英文网站,发现我不用写一个特殊的函数边压缩
和边解压,而是配置传输通道可以做到这一点,这种方式压缩可重复使用的任何契约。我发现自己编写的消息编码器是最简单的方式来
实现功能,真正的问题是如何编写信息编码器,在MSDN上没有找到任何关于此应用的实例。消息契约编码器的想法是Hook连接两端发送
和接收信息的渠道。程序是采用Microsoft Visual Studio 2008 WCF设计。
Code
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint
address="net.tcp://localhost:1234/MyService"
binding="customBinding"
bindingConfiguration="compactBinding"
contract="Client.IMyService" />
</client>
<!-- Defines a new customBinding that contains the compactMessageEncoding -->
<bindings>
<customBinding>
<binding name="compactBinding">
<compactMessageEncoding>
<binaryMessageEncoding/>
</compactMessageEncoding>
<tcpTransport />
</binding>
</customBinding>
</bindings>
<!-- Adds the extension dll so the WCF can find the compactMessageEncoding -->
<extensions>
<bindingElementExtensions>
<add name="compactMessageEncoding" type="Amib.WCF.CompactMessageEncodingElement, CompactMessageEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bindingElementExtensions>
</extensions>
</system.serviceModel>
</configuration>
这种压缩方法,消息堵塞的几率很小。使用CompactMessageEncoder在同一台机器运行客户端和服务器上可能会降低效率。
源码下载:CompactMessageEncoder_src.zip (886.97 kb)
相关文章推荐
- 基于WCF的通道网络传输数据压缩技术的应用研究 推荐
- 基于JMF RTP的网络传输媒体流
- 基于TCP流协议的socket网络文件传输Demo
- 基于WCF的RESTFul WebAPI如何对传输内容实现压缩
- 我的WCF开发框架简化版及基于NET.TCP传输方式的实现
- 重温WCF之WCF传输安全(十三)(3)基于SSL的WCF对客户端验证(转)
- 基于JMF RTP的网络传输媒体流
- 基于tcp/ip的网络数据传输接收端
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(二) 网络传输
- 用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)(转)
- 基于ProtoBuf协议实现网络传输(一)
- 发2个基于ASIHttpRequest的多任务异步网络传输类
- 网络编程 基于Socket的多文件传输程序实现(一)
- 我的WCF开发框架简化版及基于NET.TCP传输方式的实现
- [置顶] 基于iOS的网络音视频实时传输系统(三)- VideoToolbox编码音视频数据为H264、AAC
- 网络连接(基于TCP传输场景)资源思考和总结:
- 重温WCF之WCF传输安全(十三)(4)基于SSL的WCF对客户端采用证书验证(转)
- 基于JMF RTP的网络传输媒体流
- 基于邮件通道的WCF通信系统