WCF数据服务的服务器端分页

在WCF数据服务的新版本中,获得了服务器端分页的功能。这项功能可以显著提高数据服务的性能,尤其是在处理大量数据时。本文将探讨如何在WCF数据服务中实现服务器端分页,并展示如何配置服务以返回数据的特定部分。

从WCF数据服务的早期开始,就可以通过使用$top和$skip查询参数在客户端实现分页。例如,以下URI用于数据服务,将返回请求的第11-20个课程:

http://localhost:8322/SchoolDataService.svc/Courses?$skip=10⊤=10

然而,当公开包含大量项目的资源时,问题就开始出现了。假设课程库中有10000个课程。以下URI将把所有的课程都带到客户端:

http://localhost:8322/SchoolDataService.svc/Courses

运行这个请求会大大减少服务的客户端数量,因为查询返回需要很长时间。那么,能做什么呢?使用服务器端分页。

服务器端分页的实现

如何限制返回给客户端的结果集呢?可以利用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检索所有课程时,只能得到前十个课程。此外,正如看到的,在底部得到了一个链接,它引导到下一个十个结果:

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

WCF数据服务的新版本中,获得了一个新的分页特性,它使得服务器端分页成为可能。使用这种方法或者将其与客户端分页结合起来,可以扩展WCF数据服务的能力。使用服务器端分页非常简单——只需配置服务。在本文中,展示了如何实现这种行为。

代码示例

以下是实现服务器端分页的代码示例:

public class SchoolDataService : DataService<SchoolEntities> { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); config.SetEntitySetPageSize("*", 10); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485