我需要创建一个服务,允许客户端发送包含大量数据的消息,而且我不确定如何构建API。
让我们说客户想要保存一个包含可变数量的相关对象的新对象。例如,Order,包含OrderDetail对象中包含的多个订单项。一个Order可能有超过1000个与它相关的OrderDetail对象,每个对象可能包含20-40KB的数据。客户需要知道服务已收到整个订单。
我想探索使用ServiceStack来创建它。创建高流量服务并不是我非常熟悉的。我们通常会使用WCF,似乎人们只是建议增加邮件大小限制以容纳大型邮件。我不确定这是否是WCF的最佳策略,更不用说ServiceStack。
将每个OrderDetail作为自己的消息发送会更好吗?我会担心保持整个秩序的完整性走这条路。或者我应该将此作为单个大型消息保留20-40MB的数据?或者我应该尝试将其作为文件流式传输?
答案 0 :(得分:3)
使用ServiceStack's ProtoBuf support - 协议缓冲区是最有效和紧凑的有线格式。因为它更简单,所以在调查ServiceStack中的Streaming选项之前先尝试一下。
如果您已经确定您的服务将从Streaming中获益,那么这里有一篇关于如何在ServiceStack服务内部流式传输的文章sending a stream to 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
属性。