65.9K
CodeProject 正在变化。 阅读更多。
Home

在 WCF 数据服务中使用分页

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2010年7月18日

CPOL

2分钟阅读

viewsIcon

24619

在 WCF 数据服务的最新版本中,我们获得了服务器端分页功能,本文将对此进行介绍。

引言

从一开始,WCF 数据服务就提供了一种客户端分页机制。在 WCF 数据服务的最新版本中,我们也获得了服务器端分页功能,本文将对此进行介绍。

WCF 数据服务客户端分页

WCF 数据服务早期版本开始,我们可以使用 $top$skip 查询参数在客户端实现分页。例如,以下数据服务的 URI 将返回请求的第 11 到 20 个课程

https://:8322/SchoolDataService.svc/Courses?$skip=10&top=10

当您公开包含大量条目的资源时,问题就开始了。假设我们的课程库中有 10000 个课程。以下 URI 将把所有这些课程都带到客户端

https://:8322/SchoolDataService.svc/Courses

运行此请求将减少服务的客户端数量,因为它需要很长时间才能返回查询结果。那么我们该怎么办?使用服务器端分页代替。

WCF 数据服务服务器端分页

那么我们如何限制返回给客户端的结果集?我们可以使用 WCF 数据服务的一项新功能。为了创建一个服务器端分页行为,我们所需要做的就是配置服务以返回一部分数据。我们将使用新的方法
DataServiceConfiguration 类中的 SetEntitySetPageSize 方法,该方法可以为每个实体集或一次性为所有实体集(使用 *)设置。以下代码为数据服务公开的所有实体集创建服务器端分页,每次返回 10 个条目

public class SchoolDataService : DataService<SchoolEntities>
{    
  public static void InitializeService(DataServiceConfiguration config)
  {
    config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
    config.SetEntitySetPageSize("*", 10);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
  }
}

现在,当我使用带有 URI 来检索所有课程的服务时,我只会获得前十个课程。 此外,如图所示,我们在底部获得一个链接,该链接将我们引导到接下来的十个结果

Server Side Paging

并且该链接本身写成

https://:8322/SchoolDataService.svc/Courses?$skiptoken=4041

摘要

WCF 数据服务的最新版本中,我们获得了一项新的分页功能,该功能支持服务器端分页。使用此方法或将其与客户端分页结合使用,可以扩展 WCF 数据服务的功能。使用服务器端分页非常简单 - 只需要配置服务即可。在本文中,我展示了一个如何实现该行为的示例。


© . All rights reserved.