Длинный опрос
Службы 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