我有一个WCF WebService,它使用LINQ和EF连接到SQL数据库。我有一个ASP.NET MVC前端,它从Web服务中收集数据。
目前有
等功能List<Customer> GetCustomers();
随着客户数量的大量增加,传递的数据量也会增加,从而降低效率。跨WebServices等“页面数据”的最佳方法是什么?
我目前的想法是实现粗略的分页系统,例如
List<Customer> GetCustomers(int start, int length);
然而,这意味着我必须为返回List
类型的所有函数复制此类代码。不幸的是,我不能使用LINQ,因为它会更好。
有没有人对模式有任何建议或想法,以便“尽可能好”。另外,如何应对订购等事情。即如果我想通过一个特定的参数订购,我将不得不为每种类型定制一些看起来很浪费的东西。
由于
答案 0 :(得分:1)
我之前没有使用过WCF,但以下情况应该有效:
IEnumerable<T>
上编写扩展方法。此方法将返回enumerable.Skip(start).Take(length)
。答案 1 :(得分:1)
你需要复制的唯一代码是方法签名((int start, int length)
,以及对.Skip(start).Take(length)
的调用。因为这些非常能表达你真正想要做的事情,我不会不要认为重复太多了。
您可能想要研究的另一件事是OData端点,它允许您通过URL在数据源的某个子集上构建一个查询,包括过滤器和分页。有关示例,请参阅:
答案 2 :(得分:0)
您可能对streaming WCF responses感兴趣(请参阅streaming的要求)。默认情况下,消息是缓冲的,但是流可以帮助减轻痛苦,并在获取数据时将数据推出。它很容易配置:
<basicHttpBinding>
<binding name="StreamingBinding"
transferMode="StreamedRequest"
maxBufferSize="65536"
maxReceivedMessageSize="204003200" />
</basicHttpBinding>
<service behaviorConfiguration="behaviorConfig" name="serviceName">
<endpoint address="http://whatever"
binding="basicHttpBinding"
bindingConfiguration="StreamingBinding"
contract="IServiceContract" />
</service>