ASP.NET Web API在chuncks中拆分响应

时间:2013-08-21 18:26:23

标签: asp.net asp.net-web-api .net-4.5

是否可以将WEB API的响应拆分为以下块。

我有一个可以一次处理100 KB数据的win表单应用程序。

当这个客户端向我的ASP.NET WEB API请求某些数据时,我们假设WEB API响应是2 MB ...我可以以某种方式缓存此响应,将其拆分为100KB块并返回第一个块我的应用。该响应将包含到下一个块的链接/令牌,依此类推?这听起来很疯狂吗?这可行吗?

还有一个问题:当我们谈论请求/响应内容长度(大小)时,这意味着什么:内容本身不能大于100 KB或带有标题的内容等等...我想要知道内容长度中是否包含标题?

示例:如果我的响应是99KB且标题是10 KB(109 KB),那么如果限制为100KB,这将通过吗?

1 个答案:

答案 0 :(得分:1)

分页是Web服务中大型数据集的一种非常常见的解决方案。例如,Facebook会在超过一定数量的行时对API结果进行分页。您在本地缓存完整结果的想法是一个很好的优化,但如果您不确定是否将此作为最终解决方案,则可能无法将其作为第一个实现缓存。

如果没有缓存,您只需将页码和总页数传回客户端,然后就下一组就可以考虑特定页码重新进行调用。这使得客户端上的循环变得简单,并且您的数据访问层稍微复杂一些,因为它只会根据页面参数重新序列化某些行号,但这仍然非常简单。

Web API可以访问与其他ASP.NET项目类型相同的HttpRuntime.Cache对象,因此应该很容易为数据访问调用编写一个包装器并粘贴更大查询的结果进入缓存。使用令牌作为缓存中该值的键,并将密钥(可能是GUID类的实例)传递回具有当前页码的客户端。在后续调用中,跳过访问常规持久性方法(数据库,文件等),然后访问GUID中的HttpRuntime.Cache键并找到相应的行。如果您有多个托管服务的Web服务器,那么一个问题就是,因为HttpRuntime.Cache仅存在于第一次调用的计算机上,所以除非您的负载均衡器具有IP亲和力或者您有分布式缓存层,否则更加难以实施。