日期:2014-05-19  浏览次数:20887 次

在Remoting中壓縮傳縮DataSet的解決方案
基於.NET   Remoting的多層架構的一個問題:傳輸大量數據的DataSet時,出現
  System.Runtime.Remoting.RemotingException:   Server   encountered   an   internal   error.   For   more   information,   turn   off   customErrors   in   the   server 's   .config   file.
我做過小小的統計,當我Select   Top   10000條記錄或以下時,不會出錯,Select   Top   20000就會出錯了。本人認為是傳輸有問題,想壓縮下再傳輸,根據網友zendy的 "实现一个压缩Remoting传输数据的Sink:CompressionSink     "(http://www.cnblogs.com/caomao/archive/2005/07/29/202942.html)   卻出現了另一個錯誤:
System.Exception:   System.FormatException:   Header   checksum   illegal
    at   NZlib.Compression.Inflater.DecodeHeader()   in   D:\Hoplun\Compression\NZipLib\Compression\Inflater.cs:line   223
    at   NZlib.Compression.Inflater.Decode()   in   D:\Hoplun\Compression\NZipLib\Compression\Inflater.cs:line   397
    at   NZlib.Compression.Inflater.Inflate(Byte[]   buf,   Int32   off,   Int32   len)   in   D:\Hoplun\Compression\NZipLib\Compression\Inflater.cs:line   671
    at   NZlib.Streams.InflaterInputStream.Read(Byte[]   b,   Int32   off,   Int32   len)   in   D:\Hoplun\Compression\NZipLib\Streams\InflaterInputStream.cs:line   271

問題從今天上午搞到現在,沒有一點進展,現主要有疑問:
1、cnblogs上的zendy提供的解決方案,是否不能壓縮DataSet?因為我使用Zendy提供的Demo,將其如我專案的一樣,將Remoting配置在IIS當中,也可以成功運行。所以有此懷疑。
2、如果要在Remoting中壓縮傳輸DataSet,應該如何做?注意項目很快就要上線使用,不可能再重寫一個擴展DataSet之類的啦!
3、我剛開始大於10000的數據就出錯的問題,是否真如我想的錯誤原因?
4、哪位兄弟姐妹有好的解決方案,能否告知一下。不勝感激!

分數不夠的話,另開貼奉上。




------解决方案--------------------
对传输的记录进行分页
大数据量使用压缩不是优先的选择啊
------解决方案--------------------
同上,要几条记录传几条记录
------解决方案--------------------
你的带宽可能太小。。
不传dataset,去掉Schema存成xml
接收用dataset读。
------解决方案--------------------
1 不要传dataset,把数据提取到逻辑层对象直接传
2 数据量大的话,逻辑层和web service都要做分页
------解决方案--------------------
数据量大的话,带宽不够咋整都不行。
------解决方案--------------------
不要用Remoting效率极其低下无论是二进制的还是Http的,只要返回的行数一多,肯定就不行(我以前在我的C/s程序做过实验),还是直接传DataSet吧,你就感到速度会提升一个数量级的
------解决方案--------------------
楼上的看法都没有错误,但是楼主是项目要上马了,没时间改了。

先解决传输问题,如果压缩有问题,就先不要压缩,试试看在传输DataSet之前,将DataSet分解一下,每次读1000条数据,分次传输,每次传输一部分,客户端接收到了以后,再组合起来。

------解决方案--------------------
数据10000以上 Remoting 受的了吧,呵呵,

压缩也是需要时间的,还有解压缩

估计是你的程序问题
------解决方案--------------------
压缩是一个解决的办法,不知道LZ所采用的压缩方法或类库是什么,我曾经用ICSharpCode.SharpZipLib对DataSet进行压缩,经过实验,数据压缩的比例在1:10到1:6之间,对大数量传输的作用是相当明显的。到目前为止,尚未发现压缩和解压出现问题。
------解决方案--------------------
jinliangliu(KingNa) ( ) 信誉:100 2007-7-25 19:47:50 得分: 0

@ttjacky(豆豆糖)
沒辦法,剛開始是不顯示一條記錄,被用戶發現說不能這樣子。呵呵.......



你可以显示呀,但也别显示1W条啊,100条就够了。