2012-10-08 10 views
12

私が探しているものを理解する助けが必要です。基本的には、Serverが一連のXMLをストリームにダンプ(一定期間)し、ダンプが発生するたびにNの数のクライアントがダンプを読み込むサービスが必要です。WCF RESTプッシュストリームサービス

1000銘柄の一つが5セント上がるたびに、サービスは、ストリームに、いくつかのXMLをダンプします。接続しているアプリケーションはストリームから情報を取得します。

新しいデータのストリームを読み取る必要があるため、接続が終了するとは思われません。

これはWCF REST標準に準拠する必要がありますが、私が探しているものはありますか?
最後に、それは単なるデータストリームです。

更新:サービスが複数の部分からなる/混在したコンテンツの種類である必要があります。

+0

探しています。 https://stream.twitter.com/1/statuses/sample.json –

+0

はい、それは私が探しているものです。しかし、WCF/RESTの観点から。 – Dave

答えて

6

私が取り組んでいるアプリケーションにも同様のアーキテクチャがあり、私はSignalRを使用して、ロングポーリング手法を使用してクライアントに更新をプッシュすることを計画しています。 まだ実装されていないので、うまくいくとは思えませんが、ドキュメントは有望そうです。 アップデート:これを実装しました。

サーバーからクライアント(ブラウザクライアントだけでなく)にデータをプッシュすることは、常に厳しい問題でした。 SignalRはそれを簡単に死にさせ、 はあなたのためにすべての重い持ち上げを処理します。

スコットHanslemanは被写体にa good blogがあり、ここで(WCF、REST、およびSignalRを含む)有用な製品があります:あなたはTwitterのストリーミングAPIのようなもののためにhttp://www.codeproject.com/Articles/324841/EventBroker

3

WCFを使用する代わりに、ASP.NET MVC WebAPIを参照してください。

WebAPIでPushStreamContentを使用する方法の詳細については、ヘンリックのblogの例(「Push Content」の見出しの下に)があります。

2

archived Atom feedsとお考えですか?それらは100%RESTful(hypermedia controls and all)であり、最も重要なのはです。これらは非常にスケーラブルですです。

特に、アーカイブ文書は変更されないため、キャッシュの有効期限を1年以上に設定できます。サブスクリプション文書は最新のすべてのイベントが行われる場所で、常に変化しますが、適切なHTTPキャッシュヘッダーを使用すると、各クライアント要求の間に何も変更がない場合は304 Not Modifiedを返すことができます。また、サービスに自然な時間分解能がある場合は、max-ageを設定してそれを利用することができます。たとえば、あなたのデータは、20分の解像度を持っている場合は、サブスクリプション・ドキュメント応じて、次のヘッダーを含めることができます

Cache-Control: max-age=1200 

あなたはキャッシュがヒービングリフティングの大半を行うと、クライアントがサブスクリプションをポーリングすることができますさせることができ、そのよう彼らが好きなだけ頻繁に文書を書いてください。