报告RPC调用进度

时间:2013-02-12 04:23:26

标签: .net progress-bar servicestack progress

我正在使用.NET 3.5上的ServiceStack库开发一个API服务器(对我来说是一种全新的体验),旨在由Windows Forms胖客户端应用程序访问。当用户单击导致向服务器发出REST请求的按钮时,我想显示一个显示RPC调用进度的进度条。

我的服务通常遵循以下模式之一:

  • 客户端发送一个ID列表,并期望接收一个对象列表,每个ID一个对象。在这种情况下,进度百分比可以计算为(number of objects received so far) / (total number of objects requested)
  • 客户端发送请求,并期望收到未知长度的列表。在服务端,我们检索对象列表(从缓存,数据库,计算等),序列化它,然后将序列化数据写入HTTP响应流。在这种情况下,进度百分比可以估算为(number of bytes received so far) / (Content-Length of the HTTP response)

在这两种情况下,这些列表可能会很长,因此我希望它们需要花费大量时间通过网络发送。

有没有办法使用ServiceStack的JsonServiceClientXmlServiceClientServiceClientBase的任何子类来完成此操作?如果没有,那么在没有太多额外工作的情况下完成我想要的东西会是什么好方法?我知道我可以从头开始编写自己的REST客户端实现,但如果可以,我宁愿避免这样做。

2 个答案:

答案 0 :(得分:1)

一种方法是查看ServiceStack提供的pub / sub。您可以提交初始请求并返回相关标识符。那么你希望胖客户端订阅一个事件。该事件可以包含客户端计算进度的数据。

ServiceStack Redis Pub/Sub

答案 1 :(得分:1)

您无法使用当前未公开任何方式的ServiceStack's service clients来点击网址下载以报告进度条。

我建议使用HTTP Client that does support progress updates下载json字符串。要从ServiceStack服务获取JSON,您可以使用Accept: application/json HTTP标头或将?format = json 附加到QueryString。

下载完JSON字符串后,将其完全转换为DTO:

var json = ...; //download with progress
var dto = json.FromJson<MyDto>();