您的位置:首页 > 理论基础 > 计算机网络

基于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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: