2

ServiceStack 可以用于 Monotouch 和 Mono for Droid 的 HTTP 服务器推送(HTTP 流)吗

我对 HTTP 流的理解是,在响应允许将其他数据推送到客户端或浏览器之后,连接保持打开状态。

RestSharp 也可以工作。如果考虑到 Monotouch/droid,这些工作建议都不受欢迎。

4

1 回答 1

2

长轮询

ServiceStack 服务通常用于请求/响应类型的服务。最简单的 Comet 风格/(又名 HTTP 推送)解决方案是使用长轮询,我在这个ServiceStack 组线程中详细介绍了如何做到这一点。

保持工作线程打开

ServiceStack 还支持IStreamWriter您可以返回直接写入 HTTP 响应输出流的对象,可以在此 Web 服务示例服务中看到一个示例,该服务将图像直接写入响应流。这里的问题是,如果您想保持打开的连接,您将阻塞 HTTP Worker 线程。长轮询会在短时间内释放连接,因此

使用您自己的自定义 ASP.NET IHttpAsyncHandler 绕过 ServiceStack

最后,另一种选择是绕过 ServiceStack 的 Web 服务来执行此特定任务,并在 ASP.NETIHttpHandlerIHttpAsyncHandler. 您可以通过以下方式在 ServiceStack 中注册您自己RawHttpHandlers的:

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

在您的处理程序中,您可以通过 Singleton 访问您的 ServiceStack 依赖项,例如:

var myDep = EndpointHost.AppHost.TryResolve<IMyDependency>();
于 2012-10-14T22:39:46.367 回答