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) {}