WinCE数据通讯之Web Service分包传输篇

      前面写过《WinCE数据通讯之Web Service篇》那篇对于数据量不是很大的情况下单包传输是可以了,但是对于大数据量的情况下WinCE终端的内存往往会在解包或者接受数据时产生内存溢出。具体在多大数据量下会溢出,得根据不同的终端设备内存而定。我做的一个项目测试,表列为47列,其中各种数据类型都可能存在,当下载单包数据在三千条左右时终端解压将报内存溢出错误,终端用的是32M的Flash。因此,所为商用项目,在不确定数据量情况下,分包下载是必须的。相应的上传,也应该根据实际情况进行分包上传,只不过分包的工作在终端设备上进行,性质是一样的。

      分包传输要解决的一个关键问题,需要反馈包的大小给终端及接收终端请求的第几包数值。包的大小的确定原则上是根据终端能够处理的数据的字节数来确定,服务器端每次传输在终端最大能够接收的字节流量就可以了。实际在操作过程中,我开始也是这么做的,但是效率有些问题,每次终端请求时要对包字节流量进行统计,较费时间。后面想到一个“偷懒”的方法,用表记录的条数来决定字节流量,根据不同的表列字段设置不同的记录数,基本上能够跟字节流量接近,只要不超过上限就可以了,实际上也不用特别精确,因此还是可行的。记录数的确定可以另外作一个小程序针对不同的表事先计算出来写成配置文件就行了,针对一个项目只要配置好一次以后实际上传下载过程中读取这个记录数值就可以了,用表记录数来决定分包大小在计算包数时速度相比每次都要进行字节流统计省时高效。

配置文件格式如下:

配置文件

这里对表操作的读取和插入都写在配置文件里了,这样方便对字段和表的修改。

下面获取数据表数据方法:

 

获取数据表数据

对获取到的数据表进行编码及压缩处理

编码压缩数据

其中代码中的压缩zip类在前文中已经有说明。这里对数据类型进行处理于方便终端直接接收到数据后进行插入,而无须对数据类型再进行转换,节省终端插入数据处理时间。另外把序列化方法抛弃改用字符串格式,在实际的测试过程中,用XML序列化的时间要远大于字符串格式转换时间,两者不是在一个数量级别上,终端调用后解字符串和反XML序列化所耗的时间对比更明显。

接下来调用下载数据

WebService调用方法

 至此,整个下载调用过程就完成了,这个下载调用方法在页面中不能调用,因为有ref参数及params参数,若要进行测试,可以另写一个不含上述参数的调用方法即可。

下面是上传的流程

上传数据调用方法

上传数据调用方法

对接收到的数据进行解码处理

接收数据处理

插入数据表处理方法

插入数据表

整个数据接收完成。 

 

posted on 2009-07-13 10:11  皓月长空  阅读(3396)  评论(14编辑  收藏  举报

导航