9

我有一个关于 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,OrdersProducts怎么办?如何处理多项服务?

4

1 回答 1

12

为什么我们必须有一个请求类?

ServiceStack 是一个基于消息的框架,它包含Martin Fowler 的远程服务最佳实践(即远程外观、DTO 和网关),它利用 ServiceGateway 发送粗粒度的请求 DTO,通常返回类型化的响应 DTO(尽管服务可以返回任何东西)。使用基于消息的设计有很多优点,并且是使 ServiceStack 的类型化端到端 API 成为可能的原因。

例如,您可以重复使用您定义服务的这些类型:

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/程序集执行一次此操作。

ServiceStack 的 AppHosts 还允许指定多个程序集,您可以使用这些程序集来连接位于多个程序集中的服务,例如:

public AxDataAppHost() 
  : base("AxData", typeof(TestService).Assembly, typeof(ServiceInNewDll).Assembly) {}
于 2013-01-22T18:47:55.567 回答