通过ASMX Web服务传输大型数据集的最佳方法是什么?

Mal*_*ous 3 .net web-services large-data-volumes asmx

我继承了一个与Web服务对话的C#.NET应用程序,并且Web服务与Oracle数据库进行通信.我需要向UI添加导出功能,以生成一些数据的Excel电子表格.

我已经创建了一个Web服务函数来运行数据库查询,将数据加载到DataTable然后返回它,这适用于少量行.但是,在完整运行中有足够的数据,客户端应用程序锁定几分钟,然后返回超时错误.显然,这不是检索如此大型数据集的最佳方法.

在我开始并提出一些分裂呼叫的狡猾方式之前,我想知道是否已经存在可以处理这个问题的东西.目前我正在考虑一个startExport函数,然后重复调用next50Rows函数,直到没有数据,但因为Web服务是无状态的,这意味着我将不得不保留某种ID号并处理相关权限.这意味着我不必将整个数据集加载到Web服务器的内存中,这是一件好事.

因此,如果有人知道通过aN ASMX Web服务检索大量数据(以表格格式)的更好方法,请告诉我们!

小智 6

几年前我们有这个确切的业务情景,我会告诉你我们做了什么.

  1. 尽量限制传输的数据量
  2. 如果要传输n个表,请将它们拆分为n个数据表,并一次传输一个数据表.
  3. 在传输之前压缩数据集/数据表.这会产生巨大的(巨大的)影响.另一方面,将字节流解压缩回数据集/数据表.不要使用.NET的内置压缩 - 使用SharpZipLib.它提供了更好的结果.
  4. 此外,您可以异步执行传输以防止客户端锁定.

多年来,我们的客户一直使用上述解决方案,没有任何问题.