2

我需要创建一个允许客户端发送包含大量数据的消息的服务,但我不确定如何构建 API。

假设客户想要保存一个包含可变数量相关对象的新对象。例如,一个 Order,其中包含 OrderDetail 对象中包含的多个行项目。一个 Order 可能有超过 1000 个与之相关的 OrderDetail 对象,每个对象可能包含 20-40KB 的数据。客户端需要知道服务已收到整个订单。

我想探索使用 ServiceStack 来创建它。创建高流量服务并不是我非常熟悉的事情。我们通常会使用 WCF,似乎人们只是建议增加消息大小限制以容纳大消息。我不确定这是否是 WCF 的最佳策略,更不用说 ServiceStack。

将每个 OrderDetail 作为它自己的消息发送会更好吗?我会担心保持整个秩序沿着这条路线走下去的完整性。还是我应该将其保留为一条 20-40MB 数据的大消息?还是我应该尝试将其作为文件流式传输?

4

1 回答 1

3

使用ServiceStack 的 ProtoBuf 支持——协议缓冲区是目前最有效和最紧凑的有线格式。因为它更简单,所以先尝试一下,然后再研究 ServiceStack 中的 Streaming 选项。

ServiceStack 中的流式处理选项

如果您已经确定您的服务将从 Streaming 中受益匪浅,那么这里有一篇关于向 ServiceStack 发送流的文章,它展示了如何在 ServiceStack 服务中进行流处理。它展示了如何使用IRequiresRequestStream让您在服务中流式传输请求正文:

请求 DTO:

[Route("/upload/{FileName}", "POST")]
public class UploadPackage : IRequiresRequestStream
{
    public System.IO.Stream RequestStream { get; set; }

    public string FileName { get; set; }
}

对 Request Body Stream 的访问被注入到RequestStreamRequest DTO 的属性中。

于 2013-03-28T19:30:16.940 回答