【发布时间】:2011-04-05 09:54:10
【问题描述】:
我有一个 WCF 服务需要从数据库中读取大量(10 到 2000 万)个对象。
我想做的是让客户端打开一个流并让服务器在读取时从数据库推送数据。
因此,客户端可以按照 Twitter 流 API 的样式,但具有有限集,只需要在一个循环中反序列化消息,直到它从服务器获取 EOF 消息。我遇到的问题是如何返回流然后继续写入它。 WCF 可以做到这一点吗?
【问题讨论】:
我有一个 WCF 服务需要从数据库中读取大量(10 到 2000 万)个对象。
我想做的是让客户端打开一个流并让服务器在读取时从数据库推送数据。
因此,客户端可以按照 Twitter 流 API 的样式,但具有有限集,只需要在一个循环中反序列化消息,直到它从服务器获取 EOF 消息。我遇到的问题是如何返回流然后继续写入它。 WCF 可以做到这一点吗?
【问题讨论】:
不如使用WS Dual Http 之类的东西来代替设置流式传输/阻止服务。有了它,您就有了一个异步双向回调通道,允许您在服务器和客户端之间来回请求/回复信息。如果您想流式传输整个集合,您可能会看到的问题是一种正常方式,即某些资源可能会阻止其他请求(或超时),而其他用户尝试访问该服务。
【讨论】:
问题是 WCF 不提供操作的响应流。从操作返回的流只是一些消息的“内容”。我试图用一些线程场景来欺骗 WCF,在这些场景中我返回 MemoryStream 并尝试从其他线程填充它,但正如预期的那样它不起作用。
提到 HttpHandler 是唯一的出路。
【讨论】:
您可能想看看PollingDuplexHttpBinding(通知id 可能可能 :-))。
有些人不太喜欢这种绑定,但在完成正确配置的最初障碍之后,我并没有遇到太多麻烦。
它当然可以完成我认为的工作,因为据我所知,它只不过是网络套接字中使用的“长轮询技巧”。
HTH。
【讨论】: