我对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)
{
}
}
如果我有多个服务,在上面的示例中我使用的是TestService
,但如果我有一个Customers
,Orders
和Products
怎么办?我该如何处理多种服务?
答案 0 :(得分:12)
为什么我们必须有一个请求类?
ServiceStack是一个基于消息的框架,它包含Martin Fowler's Remote Service Best Practices(即远程门面,DTO和网关),它利用ServiceGateway发送粗粒度的请求DTO,这些DTO通常返回一个类型化的响应DTO(尽管services can return anything })。使用基于消息的设计has many advantages,这是启用ServiceStack类型的端到端API的原因。
E.g。您可以通过以下方式重新使用您定义服务的这些类型:
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#客户端将回退使用pre-defined routes(默认情况下启用)。
如果我有多个服务怎么办?在上面的示例中,我使用的是TestService,但如果我有一个用于客户,订单和产品的服务怎么办?如何处理多项服务?
在您的AppHost基础构造函数中,您传入程序集(即不是单个服务):
public AxDataAppHost() : base("AxData", typeof(TestService).Assembly) {}
这告诉ServiceStack在哪里查找并连接所有服务。您只需为服务所在的每个dll /程序集执行一次此操作。
ServiceStack的AppHosts还允许指定多个程序集,您可以使用这些程序集连接位于多个程序集中的服务,例如:
public AxDataAppHost()
: base("AxData", typeof(TestService).Assembly, typeof(ServiceInNewDll).Assembly) {}