我正在开发一个包含WCF服务和ASP.NET MVC客户端的应用程序. ASP.NET MVC网站必须显示一个对象网格 – 比如产品.这些产品存储在可通过WCF服务访问的数据库中.所以在MVC控制器的某个地方,我调用WCF服务的方法,返回我需要显示的一系列产品.
那么我的问题是什么?我想为我的产品网格实现寻呼机功能,因为可能会有很多产品.所以有几种方法可以做到这一点:
>我的控制器可以获取整个产品列表,只需进行内存分页
> WCF可以选择所有产品并将其存储在其缓存中的某个位置,然后根据请求的页码传给控制器只有其中的一部分.
> WCF可以根据请求的页码从数据库中只选择部分产品.
> WCF可以将IQueryable返回给控制器,然后控制器将根据需要选择任何他想要的内容.
据我所知(如果不正确,请纠正我),第一个选择是无用的,所以我必须选择其他人.
第二个选项浪费我的服务器内存.
第三个选项是OK,但在WCF端实现分页似乎有点丑.
第四个选项听起来很混乱.我实际上向客户端传递某种查询,然后他自己通过WCF服务查询我的数据库.我无法弄清楚如何正确实现.
那么可以请帮我选择正确的方法来实现吗?
解决方法
你的后端数据库层是什么样的?如果您使用LINQ(to-sql或-to-Entities),则可以通过指定页面大小和所需的页码来实现WCF的分页,然后使用LINQ的“Skip”和“Take”运算符获取请求的页面 – 大致如下:
[ServiceContract] public interface IFetchData { [OperationContract] public List<Data> GetData(int pageSize,int pageNumber) }
然后实现它这样(简化):
public class FetchDataService : IFetchData { public List<Data> GetData(int pageSize,int pageNumber) { var query = yourContext.DataTable .Skip((pageNumber - 1) * pageSize) .Take(pageSize); return query.ToList(); } }
这对你有帮助吗?
渣子