ServiceStack - пустые классы запросов?

У меня есть вопрос относительно ServiceStack. Почему существуют пустые классы запросов, почему у нас должен быть класс запросов? Например:

[Route("/test", "GET")]
public class Test
{

}

public class TestResponse
{
    public string Date { get; set; }
}

public class TestService : Service
{
    public object Get(Test test)
    {
        return new TestResponse { Date = DateTime.Now.ToString() };
    }
}

Если я не передам объект с моим запросом, мой сервис не сработает?

Тогда я мой файл Global.asax, у меня есть:

public class AxDataAppHost : AppHostBase
{
    public AxDataAppHost() :
        base("AxData", typeof(TestService).Assembly)
    {
    }
}

Что делать, если у меня есть более 1 службы, в приведенном выше примере я использую TestService но что, если у меня есть один для Customers, Orders а также Products? Как мне справиться с несколькими услугами?

1 ответ

Решение

почему у нас должен быть класс запроса?

ServiceStack - это основанная на сообщениях структура, которая включает в себя рекомендации по удаленному обслуживанию Мартина Фаулера (т. Е. Remote Facade, DTO и Gateway), которые используют ServiceGateway для отправки грубых запросов DTO, которые обычно возвращают типизированный DTO ответа (хотя службы могут возвращать что угодно). Использование дизайна, основанного на сообщениях, имеет много преимуществ и позволяет использовать типизированный сквозной API ServiceStack.

Например, вы можете повторно использовать эти типы, с которыми вы определили свои услуги:

public class Test : IReturn<TestResponse> {}

public class TestResponse
{
    public string Date { get; set; }
}

На клиенте, что дает вам типизированный API без кода, например:

var client = new JsonServiceClient(BaseUri);
TestResponse response = client.Get(new Test());

Примечание: вам даже не нужны настраиваемые маршруты, так как по умолчанию клиенты ServiceStack на C# откатятся на использование предопределенных маршрутов (по умолчанию включено).

Что если у меня более 1 службы, в приведенном выше примере я использую TestService, но что если у меня есть одна для клиентов, заказов и продуктов? Как мне справиться с несколькими услугами?

В базовом конструкторе AppHost вы передаете сборку (т. Е. НЕ один сервис):

public AxDataAppHost() : base("AxData", typeof(TestService).Assembly) {}

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

AppHosts в ServiceStack также позволяет указывать несколько сборок, которые вы можете использовать для подключения служб, расположенных в нескольких сборках, например:

public AxDataAppHost() 
  : base("AxData", typeof(TestService).Assembly, typeof(ServiceInNewDll).Assembly) {}
Другие вопросы по тегам