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

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

在我继续想出一些巧妙的方法来拆分通话之前,我想知道是否已经有可以处理这个问题的东西。目前我正在考虑使用 startExport 函数,然后反复调用 next50Rows 函数,直到没有数据为止,但是因为 Web 服务是无状态的,这意味着我将不得不保留某种 ID 号并处理相关权限。这意味着我不必将整个数据集加载到 Web 服务器的内存中,这是一件好事。

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

最佳答案

几年前我们有过这种确切的业务场景,我会告诉你我们做了什么。

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

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

    关于.net - 通过 ASMX Web 服务传输大型数据集的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3050158/

    10-13 08:28
    查看更多