Можно ли использовать ServiceStack для HTTP Server Push (потоковая передача HTTP) от Monotouch и Mono для Droid

Можно ли использовать ServiceStack для HTTP Server Push (потоковая передача HTTP) от Monotouch и Mono для Droid

Мое понимание потоковой передачи HTTP заключается в том, что соединение остается открытым после ответа, что позволяет передавать дополнительные данные клиенту или браузеру.

RestSharp также может работать. Если ни одно из этих рабочих предложений не приветствуется с учетом Monotouch/droid.


person WiredLessInTX    schedule 14.10.2012    source источник


Ответы (1)


Длинный опрос

Службы ServiceStack обычно предназначены для служб типа «запрос/ответ». Самым простым решением в стиле Comet / (он же HTTP Push) для реализации будет использование длительного опроса, о котором я подробно расскажу, как это сделать, в этом тема группы ServiceStack.

Сохранение рабочего потока открытым

ServiceStack также поддерживает IStreamWriter, где вы можете вернуть объект, который записывает непосредственно в поток вывода ответа HTTP, пример этого можно увидеть в этом примере службы веб-службы, которая записывает файл Изображение напрямую в поток ответов. Проблема здесь в том, что если вы хотите сохранить открытое соединение, вы заблокируете рабочий поток HTTP. Длительный опрос разрывает соединение через короткое время, поэтому

Обход ServiceStack с помощью собственного пользовательского ASP.NET IHttpAsyncHandler

Наконец, еще один вариант — обойти веб-службы ServiceStack для этой конкретной задачи и просто реализовать собственное решение поверх IHttpHandler и IHttpAsyncHandler ASP.NET. Вы можете сделать это в ServiceStack, зарегистрировав свой собственный RawHttpHandlers следующим образом:

SetConfig(new EndpointHostConfig {
    RawHttpHandlers = { httpReq => 
        httpReq.PathInfo.StartsWith("/streaming")
           ? new MyStreamingHandler() 
           : null; 
    }
});

В вашем обработчике вы можете получить доступ к своим зависимостям ServiceStack через Singleton, например:

var myDep = EndpointHost.AppHost.TryResolve<IMyDependency>();
person mythz    schedule 14.10.2012