向ServiceStack服务发送一个大消息
本文关键字:一个 消息 ServiceStack 服务 | 更新日期: 2023-09-27 18:06:15
我需要创建一个服务,允许客户端发送包含大量数据的消息,我不确定如何构建API。
假设客户端想要保存一个包含可变数量的相关对象的新对象。例如,一个Order,它包含OrderDetail对象中包含的几个行项。一个Order可能有超过1000个与之相关的OrderDetail对象,每个对象可能包含20-40KB的数据。客户端需要知道服务已经收到了整个订单。
我想探索使用ServiceStack来创建这个。创建高流量服务并不是我非常熟悉的事情。我们通常会使用WCF,似乎人们只是建议增加消息大小限制来容纳大型消息。我不确定这是否是WCF的最佳策略,更不用说ServiceStack了。
发送每个OrderDetail作为它自己的消息会更好吗?我担心的是在这条路上保持整个教团的完整性。或者我应该将其保留为单个20-40MB数据的大消息?或者我应该尝试将其作为文件流式传输?
使用ServiceStack的ProtoBuf支持-协议缓冲区是最有效和紧凑的有线格式。因为它更简单,所以在研究ServiceStack中的Streaming选项之前,先尝试一下。
ServiceStack中的流选项
如果你已经确定你的服务将从流媒体中受益匪浅,那么这里有一篇关于向ServiceStack发送流的文章,该文章展示了如何在ServiceStack服务中进行流媒体。它展示了如何使用IRequiresRequestStream,它可以让你在服务中流式传输请求体:
请求DTO:
[Route("/upload/{FileName}", "POST")]
public class UploadPackage : IRequiresRequestStream
{
public System.IO.Stream RequestStream { get; set; }
public string FileName { get; set; }
}
对请求体流的访问被注入到请求DTO的RequestStream
属性中。