Мне нужно создать службу, которая позволит клиенту отправлять сообщения, содержащие большой объем данных, и я не уверен, как структурировать API.

Допустим, клиент хочет сохранить новый объект, который содержит переменное количество связанных объектов. Например, Заказ, который содержит несколько позиций, содержащихся в объектах OrderDetail. С заказом может быть связано более 1000 объектов OrderDetail, каждый из которых может содержать 20-40 КБ данных. Клиент должен знать, что услуга получила весь заказ.

Я хотел бы изучить использование ServiceStack для его создания. Я не очень хорошо знаком с созданием сервиса с высоким трафиком. Обычно мы используем WCF, и кажется, что люди просто рекомендуют увеличить предельный размер сообщения, чтобы разместить большое сообщение. Я не уверен, что это лучшая стратегия для WCF, не говоря уже о ServiceStack.

Было бы лучше отправлять каждый OrderDetail как собственное сообщение? Я был бы обеспокоен сохранением целостности всего Ордена, идущего по этому пути. Или я должен просто сохранить это как одно большое сообщение с 20-40 МБ данных? Или мне попробовать передать его как файл?

2
Malaise 28 Мар 2013 в 21:01
Почему бы не сохранить данные в формате XML или не сериализовать данные и не отправить содержимое таким образом ..?
 – 
MethodMan
28 Мар 2013 в 21:05
Я не уверен, что вы говорите, это будет сериализовано. Некоторые данные являются двоичными, но да, большинство из них может быть в формате XML. Но как это что-то меняет? У меня все еще была бы строка XML размером 40 МБ, которую я отправляю, или я мог бы ее передать в потоковом режиме, или я мог бы разделить XML на фрагменты, которые будут повторно собраны на сервере. У меня все еще остается вопрос, какой из них является лучшим вариантом для отправки большого количества данных?
 – 
Malaise
28 Мар 2013 в 21:27

1 ответ

Лучший ответ

Используйте поддержку ProtoBuf в ServiceStack - буферы протоколов являются наиболее эффективным и компактным форматом проводов. . Так как это проще, сначала попробуйте это, прежде чем исследовать параметры потоковой передачи в ServiceStack.

Параметры потоковой передачи в 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; }
}

Доступ к потоку тела запроса вводится в свойство RequestStream DTO запроса.

3
mythz 28 Мар 2013 в 23:30