将大消息发送到ServiceStack服务

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

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

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

将每个OrderDetail作为自己的消息发送会更好吗? 我会担心保持整个秩序的完整性走这条路。 或者我应该将此作为单个大型消息保留20-40MB的数据? 或者我应该尝试将其作为文件流式传输?

使用ServiceStack的ProtoBuf支持 – 协议缓冲区是最有效和紧凑的有线格式。 因为它更简单,所以在调查ServiceStack中的Streaming选项之前先尝试一下。

ServiceStack中的流选项

如果您已经确定您的服务将从Streaming中受益匪浅,那么这里有一篇关于向ServiceStack发送流的文章,该文章展示了如何在ServiceStack服务内部进行流式传输。 它显示了如何使用IRequiresRequestStream ,它允许您在服务中流式传输Request Body:

请求DTO:

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

对请求主体流的访问被注入到请求DTO的RequestStream属性中。