servicestack,C#,Web Services,servicestack" /> servicestack,C#,Web Services,servicestack" />

C# 向ServiceStack服务发送大消息

C# 向ServiceStack服务发送大消息,c#,web-services,servicestack,C#,Web Services,servicestack,我需要创建一个服务,允许客户端发送包含大量数据的消息,但我不确定如何构造API 假设客户机希望保存一个新对象,该对象包含数量可变的相关对象。例如,订单包含OrderDetail对象中包含的多个行项目。一个订单可能有1000多个与之相关的OrderDetail对象,每个对象可能包含20-40KB的数据。客户机需要知道服务已收到整个订单 我想探索一下如何使用ServiceStack来创建它。创建高流量服务不是我非常熟悉的事情。我们通常会使用WCF,而且人们似乎只是建议增加消息大小限制以适应大型消息。

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

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

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

是否最好将每个OrderDetail作为自己的消息发送?我会关注整个订单的完整性。或者我应该把它作为一条20-40MB数据的大消息来保存吗?或者我应该尝试将其作为文件流传输?

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

ServiceStack中的流选项 如果您已经确定您的服务将从流式处理中受益匪浅,那么这里有一篇文章介绍如何在ServiceStack服务中进行流式处理。它显示了如何使用它,使您能够在服务中对请求正文进行流式处理:

请求DTO:

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

    public string FileName { get; set; }
}

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

为什么不以XML格式保存数据或序列化数据并以这种方式发送内容呢?我不确定您在说什么,这将被序列化。有些数据是二进制的,但大多数数据可能是XML。但是,这会有什么改变呢?我仍然可以发送一个40MB的XML字符串,或者我可以流式传输它,或者我可以将XML分成块,在服务器上重新组装。我的问题仍然是,哪一个是发送大量数据的最佳选择?