1

我正在使用 .NET 3.5 上的 ServiceStack 库开发一个 API 服务器(对我来说是一种新体验),旨在由 Windows 窗体厚客户端应用程序访问。当用户单击导致向服务器发出 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 的 , 或一般的任何子类来完成JsonServiceClientXmlServiceClient任务ServiceClientBase?如果没有,那么在没有太多额外工作的情况下完成我想要的事情的好方法是什么?我知道我可以从头开始编写自己的 REST 客户端实现,但如果可以的话,我宁愿避免这样做。

4

2 回答 2

1

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

ServiceStack Redis 发布/订阅

于 2013-02-12T04:47:01.963 回答
1

您不能使用ServiceStack 的服务客户端,它们当前没有公开任何方式来利用 URL 的下载来报告进度条。

我建议使用支持进度更新的 HTTP 客户端来下载 json 字符串。要从 ServiceStack 服务获取 JSON,您可以使用Accept: application/jsonHTTP 标头或将?format=json附加到 QueryString。

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

var json = ...; //download with progress
var dto = json.FromJson<MyDto>();
于 2013-02-12T05:11:52.077 回答