【问题标题】:how to handle big lists for operation return in SOA如何处理 SOA 中操作返回的大列表
【发布时间】:2011-03-27 06:15:23
【问题描述】:

我正在尝试遵循 SOA 方法来实现一些服务。我正在使用 WCF,我想知道在操作中处理长列表的最佳方法/实践是什么。 例如,我有一个要返回 UI(桌面客户端,而不是 Web)的用户列表。 如果我返回每条记录,列表可能会变得太大而无法从服务传输到客户端,并且可能会发生许多错误(例如超出消息大小或连接断开)。

有没有众所周知的方法来处理这种情况?

非常感谢 亚历克斯,

【问题讨论】:

  • 应用程序是否需要每次调用的完整列表?
  • 有这样一种方式:分页返回结果。

标签: .net wcf soa


【解决方案1】:

如果您对要发送的数量有所了解,则可以在客户端的 app.config 中增加消息大小限制,然后再发疯。但是您不应该无缘无故地向每个客户发送 50MB 的客户记录。

如果用户一次只能浏览其中一些记录,您可以抓取一些记录,然后在用户滚动列表时抓取更多记录。或者,您可以向用户询问搜索模式(例如前几个字母),然后只抓取那些。

【讨论】:

【解决方案2】:

客户需要所有数据(但您认为单个消息太大)还是只需要部分数据?

如果他不需要所有数据,更好的方法可能是为用户提供能够过滤的服务。

如果用户需要所有数据,那么“经典”解决方案是返回所有数据。 但是,当客户端是 Web 应用程序之类的瘦客户端时,这可能会出现问题。

如果该服务应该是通用服务(适用于其他客户端),我将使用自定义服务包装它,该服务允许在每次调用中获取小“块”数据。如果服务不是通用的,并且是为这个客户定制的 - 我会更改基本服务以允许数据分块。

通常 - 拥有“面向会话”的服务不是一个好方法,但与应用程序的客户端服务器交互不是典型的服务,而且它通常在一般服务提供者和服务消费者之间具有更强的耦合。

【讨论】:

    【解决方案3】:

    感谢大家的反馈。

    我想我需要对结果进行分页。该服务为一般用途。它旨在供任何应用程序使用(作为 API)。

    所以最合适的方法应该是按块/页获取数据。 我可以在我的客户端应用 (WPF) 中读取多达一定数量的行。

    亚历克斯。

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 2010-10-13
      • 1970-01-01
      • 2016-06-28
      • 2017-07-31
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多