【问题标题】:Is it possible to stream entities over OData?是否可以通过 OData 流式传输实体?
【发布时间】:2012-11-07 04:44:12
【问题描述】:

我是 OData 的新手,所以请多多包涵。

假设我将 IQueryable 与 OData 一起使用,并且服务器生成的记录数很大(比如 10000),是否可以在客户端上的实体不断到达时开始处理它们(在整个已收到 HTTP 流)?

我想到的概念类似于将 LINQ 与 SqlDataReader (details) 一起使用,其中仅在枚举记录时从 SQL 中获取数据(通过连接到 SqlDataReader 的底层只进服务器端游标)由 LINQ2SQL 提供程序提供。

HTTP 确实允许流式传输。 OData IQueryable 可以利用这种支持吗?如果可以实现端到端流式传输,数据将在服务器上枚举,并一次一条记录地流入(序列化)到 HTTP 流中。当客户端接收并反序列化流时,可以枚举实体并不断到达一个。

这是一厢情愿吗?

【问题讨论】:

    标签: .net odata iqueryable


    【解决方案1】:

    是否可以使用 WCF 数据服务流式传输内容? 是的,是的。为此,您必须implement the streaming provider 允许流式传输二进制大对象 (BLOB) 数据,例如照片、视频和文档(无实体

    如果一个大的结果集从 IIS 流式传输,它是 feed/xml/json 并且在响应完成之前它是无效的。但是,您可以使用 $skip 和 $top 参数执行多个并行请求,以便将该结果集拆分为多个较小的请求并在它们到达时加入它们。

    更新: 另一种选择是创建您自己的基础架构,以便通过 wcf ds 进行流式传输,就像这个人 http://blogs.msdn.com/b/tom_laird-mcconnell/archive/2010/01/18/using-ado-net-wcf-data-services-for-streaming-infinite-event-result-sets.aspx

    【讨论】:

    • 这似乎不是一个合理的建议。您是否建议将实体公开为内容链接并发出 10000+1 个请求?
    • 不,我不是建议 10000+1。如果您有 10000 条记录并且想要全部获取它们,并且由于您无法流式传输它们,您可以尝试使用不同的集合大小。例如,20 个请求,每个请求有 500 条记录,或者 40 个请求有 250 条记录,依此类推。
    • 我有点开玩笑。我知道内容链接。这并没有真正回答我的问题。您能否提供一个可靠/官方的消息来源说流媒体实体是不可能的?额外的学分,为什么不可能?
    • 您建议的方法的问题是客户端数据的关联/排序必须手动管理。这不是我想要做的或询问的。总是有 +1 请求,查询实体集合并等待内容链接(价值 10000 条记录)
    • 我已经更新了我的答案。看看作者是如何创建自己的StreamingDataService类并实现自己的IDataServiceHost的。所有这一切都使他能够使用您正在寻找的“无限结果集”。我希望它有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多