将大消息发送到ServiceStack服务

时间:2013-03-28 17:01:54

标签: c# web-services servicestack

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

ServiceStack中的流媒体选项

如果您已经确定您的服务将从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属性。