需要一些帮助来弄清楚我在寻找什么。基本上,我需要一种服务,其中Server
将一堆XML转储到流中(在一段时间内),每次转储发生N
个客户端读取转储。
示例:每当1000
个股票中的一个上涨5
美分时,该服务会将一些XML转储到流中。连接应用程序从流中获取信息。
我认为连接不会关闭,因为需要读取新数据流的内容。
这需要遵循WCF REST标准,那里有什么我正在寻找的东西吗?
最后,它只是一个不间断的数据流。
更新:看起来该服务需要是多部分/混合内容类型。
答案 0 :(得分:6)
我正在开发的应用程序具有类似的体系结构,我计划使用SignalR使用长轮询技术将更新推送到客户端。 我还没有实现它,所以我不能发誓它会对你有用,但是他们的文档似乎很有希望:更新:我现在已经实现了它,并且它运行得很好。
将数据从服务器推送到客户端(而不仅仅是浏览器客户端) 一直是一个棘手的问题。 SignalR让它变得简单易行 处理所有繁重的工作。
Scott Hansleman关于这个主题有a good blog,这里有一篇有用的文章(涉及WCF,REST和SignalR):http://www.codeproject.com/Articles/324841/EventBroker
答案 1 :(得分:3)
您是否考虑ASP.NET MVC WebAPI而不是使用WCF?
有关在WebAPI中使用PushStreamContent的更多信息,Henrik有一个很好的blog示例(标题为'推送内容')。
答案 2 :(得分:2)
您考虑过archived Atom feeds了吗?它们是100%RESTful(hypermedia controls and all),最重要的是,它们具有很强的可扩展性。
具体而言,存档文档永远不会更改,因此您可以将缓存过期设置为1年或更长时间。订阅文档是所有最新事件发生并且不断变化的地方,但是如果使用适当的HTTP缓存标头,您可以返回304 Not Modified,如果每个客户端请求之间没有任何更改。此外,如果您的服务具有自然时间分辨率,则可以设置max-age
以利用该功能。例如,如果数据的分辨率为20分钟,则可以在订阅文档响应中包含以下标题:
Cache-Control: max-age=1200
通过这种方式,您可以让缓存完成大部分的提升,客户可以随时轮询订阅文档,而不会将您的服务带到它的膝盖上。