ServiceStackをMonotouchおよびMonoforDroidからのHTTPサーバープッシュ(HTTPストリーミング)に使用できますか
HTTPストリーミングについての私の理解は、応答後も接続が開いたままになり、追加のデータをクライアントまたはブラウザーにプッシュできるようにすることです。
RestSharpも機能する可能性があります。モノタッチ/ドロイドを念頭に置いて、これらの作業提案のどちらも歓迎されない場合。
ServiceStackをMonotouchおよびMonoforDroidからのHTTPサーバープッシュ(HTTPストリーミング)に使用できますか
HTTPストリーミングについての私の理解は、応答後も接続が開いたままになり、追加のデータをクライアントまたはブラウザーにプッシュできるようにすることです。
RestSharpも機能する可能性があります。モノタッチ/ドロイドを念頭に置いて、これらの作業提案のどちらも歓迎されない場合。
ServiceStackサービスは通常、要求/応答タイプのサービスを対象としています。実装するのが最も簡単なCometスタイル/(別名HTTPプッシュ)ソリューションは、このServiceStackグループスレッドでそれを行う方法について少し詳しく説明するロングポーリングを使用することです。
ServiceStackはIStreamWriter
、HTTP応答出力ストリームに直接書き込むオブジェクトを返すことができる場所もサポートしています。この例は、応答ストリームに直接画像を書き込むこのWebサービスのサンプルサービスで確認できます。ここでの問題は、開いた接続を維持したい場合、HTTPワーカースレッドをブロックすることです。ロングポーリングは短時間で接続を解放するので
最後に、別のオプションは、この特定のタスクのためにServiceStackのWebサービスをバイパスし、ASP.NETIHttpHandler
との上に独自のソリューションを実装することIHttpAsyncHandler
です。これをServiceStackで行うには、次のものを登録しますRawHttpHandlers
。
SetConfig(new EndpointHostConfig {
RawHttpHandlers = { httpReq =>
httpReq.PathInfo.StartsWith("/streaming")
? new MyStreamingHandler()
: null;
}
});
ハンドラーでは、シングルトンを介してServiceStackの依存関係にアクセスできます。例:
var myDep = EndpointHost.AppHost.TryResolve<IMyDependency>();